摘要: dfs是最广泛的搜索算法,通俗讲就是:一条路走到黑,通过暴力枚举,将所有可能的情况一一枚举,不断地试探来找到解 对每一个可能的分支路径深入到不能再深入,而且每个顶点只访问一次。 dfs一般借助递归来实现: 1 void dfs(int deep){ 2 if(到达边界){ 3 //做一些处理后返回 阅读全文
posted @ 2020-10-09 22:48 nilbook 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 当数据量很大时,我们不能一个一个去判断每个数是否为素数,那么我们可以采用欧拉筛来做 由于埃氏筛会存在某个合数多次被筛的情况,所以 欧拉筛的核心思想就是:让每个合数只被它的的最小质因子筛选一次,没有重复 欧拉筛:时间复杂度为O(n),所以也称为线性筛,但只能筛到1e8这么大 1 const int m 阅读全文
posted @ 2020-10-06 19:58 nilbook 阅读(1383) 评论(0) 推荐(0) 编辑
摘要: 由BFS得到的层序结果是一个一位数组,而我们要得到二维数组,则需要: 在每一层遍历开始前,先记录队列中的 结点数量 n(也就是这一层的结点数量),然后一口气处理完这一层的 n 个结点。 在while循环的每一轮,都是将当前层的结点全部出队,再将下一层的所有结点入队,就实现了层次遍历 1 /** 2 阅读全文
posted @ 2020-10-06 17:40 nilbook 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 力扣公司的员工都使用员工卡来开办公室的门。每当一个员工使用一次他的员工卡,安保系统会记录下员工的名字和使用时间。如果一个员工在一小时时间内使用员工卡的次数大于等于三次,这个系统会自动发布一个 警告 。 给你字符串数组 keyName 和 keyTime ,其中 [keyName[i], keyTim 阅读全文
posted @ 2020-10-04 15:25 nilbook 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 合并二叉树,叶子叠加合并 创建新的root结点,一个一个的将两颗二叉树的结点叠加起来 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1&&!t2){ 5 return 阅读全文
posted @ 2020-09-23 00:38 nilbook 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 解题思路:dfs深度优先遍历搜索,本质是搜索叶子结点,边搜索边更新tmp的值——不是叶子结点就将tm 阅读全文
posted @ 2020-09-03 00:55 nilbook 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 动态规划求解,根据当前元素来填正负dp表的状态 1 class Solution { 2 public: 3 /* 初始化 po 阅读全文
posted @ 2020-09-01 02:25 nilbook 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式。 模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。 如果数组中存在至少重复 k 次且长度为 m 的模式,则返回 true ,否则返回 false 。 解 阅读全文
posted @ 2020-09-01 01:49 nilbook 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 有 3n 堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币: 每一轮中,你将会选出 任意 3 堆硬币(不一定连续)。Alice 将会取走硬币数量最多的那一堆。你将会取走硬币数量第二多的那一堆。Bob 将会取走最后一堆。重复这个过程,直到没有更多硬币。给你一个整数数组 piles ,其中 pile 阅读全文
posted @ 2020-08-25 01:23 nilbook 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编 阅读全文
posted @ 2020-08-24 12:08 nilbook 阅读(244) 评论(0) 推荐(0) 编辑