随笔分类 - 算法
摘要:原题链接:https://www.acwing.com/problem/content/description/873/ 给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7 取模。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个整数 ai。 输出格式 输出一个
阅读全文
摘要:原题链接:https://leetcode.cn/problems/maximum-sum-bst-in-binary-tree/ 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。 任意节点的
阅读全文
摘要:原题链接:https://leetcode.cn/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/ 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 origi
阅读全文
摘要:public class KMPTest { public static void main(String[] args) { String s = "abababb"; String t = "abb"; int m = s.length(), n = t.length(); s = " " +
阅读全文
摘要:题目:给两个字符串,请你在S中找到包含T中全部字母的最短字串。 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> using namespace std; string min_w
阅读全文
摘要:算法思路:使用深度优先遍历遍历整张图,如果发现某个顶点已经染过色,并且和相邻顶点的颜色相同,则返回false,否则一直染下去,直到遍历完整张图。 代码实现: #include <iostream> #include <cstring> #include <algorithm> using names
阅读全文
摘要:kruskal算法求最小生成树: (1)将所有边按照权重进行排序; (2)依次选取每条边,判断该边两端顶点是否联通,若不联通,则将该边加入集合中。 (3)如果最后加入了n-1条边,则说明存在最小生成树,否则没有。 #include <iostream> #include <cstring> #inc
阅读全文
摘要:算法流程: (1)初始化所有点到已加入点集合的距离为INF。 (2)做n次遍历,每次从未加入集合的点中找到离集合距离最小的点,将该点加入到生成树中。 (3)在每次循环中一旦找到距离最小的点后,使用该点来更新集合外的点到集合的距离。 使用的数据结构:领接矩阵(稠密图) 代码如下: #include <
阅读全文
摘要:算法思想:每次从集合中找到一个未访问过的最短路径的点,然后根据改点来更新其他点的距离。 (1)朴素算法 适用场景:稠密图,边较多,适用邻接矩阵存储。 #include <iostream> #include <cstring> #include <algorithm> using namespace
阅读全文