摘要: BFS 所谓宽度优先,就是每次都尝试访问同一层的节点。 如果同一层都访问完了,再访问下一层。 这样做的结果是,BFS 算法找到的路径是从起点开始的 最短 合法路径。换言之,这条路所包含的边数最小。 在 BFS 结束时,每个节点都是通过从起点到该点的最短路径访问的。 实现 bfs(s) { q = n 阅读全文
posted @ 2019-10-17 14:58 betaa 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 回溯:当把问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,则函数将返回上一级递归调用,这种现象称为回溯。 如果在回溯法中使用了辅助的全局变量,则一定要及时把它们恢复原状。特别地,若函数有多个出口,则需在每个出口处回复被修改的值。 Leetcode 51. N-Queens 给定$n$,输出$ 阅读全文
posted @ 2019-10-17 11:26 betaa 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 问题:输出$[0,1,2,3,...n)$的所有子集。 1. 增量构造法:一次选出一个元素放到集合中。由于$A$中的元素个数不确定,每次递归调用都要输出当前集合。另外,递归边界也不需要显示确定——如果无法继续添加元素,自然就不会递归了。 2. 位向量法:构造一个位向量$B[i]$,而不是直接构造子集 阅读全文
posted @ 2019-10-16 16:06 betaa 阅读(181) 评论(0) 推荐(0) 编辑
摘要: Leetcode 46. Permutations 给定一个包含不同整数的集合,生成所有可能的排列。 Leetcode 47. Permutations II 给定一个可能包含重复整数的集合,生成所有可能的排列。 分析:值传递? Leetcode 31. Next Permutation 实现nex 阅读全文
posted @ 2019-10-15 17:35 betaa 阅读(213) 评论(0) 推荐(0) 编辑
摘要: sliding window: 解决数组/字符串的子元素问题,它可以将嵌套循环问题,转换为单循环问题,降低时间复杂度. 最简单的sliding window问题:给定一个整数数组,计算长度为 k 的连续子数组的最大总和。 总结一下Leetcode上sliding window的一些问题: Leetc 阅读全文
posted @ 2019-10-10 15:39 betaa 阅读(744) 评论(0) 推荐(0) 编辑
摘要: Leetcode 560. Subarray Sum Equals K 求一个数组中和等于k的子数组的个数 分析:prefix sum + map,当前的prefix sum为cur,之前出现过的prefix sum存到counter中(因为存在负数,可能有多个prefix sum相等,因此coun 阅读全文
posted @ 2019-10-09 15:59 betaa 阅读(169) 评论(0) 推荐(0) 编辑
摘要: Leetcode上一共出现了6道炒股问题:一个数组代表一支股票每天的价格,买了股票再卖出算一次交易,多个交易不能交叉,即只能卖了股票之后才能再买。求最大收益。 Leetcode上有一篇post介绍了一种通用的针对这类问题的解法,值得参考。 以下是我总结的每个问题比较容易理解的方法。 1.Best T 阅读全文
posted @ 2019-09-26 10:05 betaa 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 问题描述:在一个数列中找到一个连续的子数列,使得该子数列的和最大。 Kadane算法 扫描一次整个数列的所有值,在每个点计算以该点为结束点的子数列的最大和。该子数列由两部分组成:以前一个位置为结束点的最大子数列、该点的数值。(最优子结构,因此是动态规划问题) 这个问题很早就被Jon Bentley讨 阅读全文
posted @ 2019-09-25 13:13 betaa 阅读(242) 评论(0) 推荐(0) 编辑
摘要: https://www.zhihu.com/search?q=%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE&utm_content=search_history&type=content C++ <algorithm>的四个二分查找函数:搜索区间为[first, last 阅读全文
posted @ 2019-09-17 14:40 betaa 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 问题来源于the Dutch national flag problem,荷兰国旗问题? 把数组重新排序,比mid小的在前面,等于mid的在中间,比mid大的在最后,类似于快速排序中的partition 循环里,i <= j 保持不变,n是比mid大的数字在数组中的索引下界,j是当前考虑的数字的索引 阅读全文
posted @ 2019-09-05 14:22 betaa 阅读(475) 评论(0) 推荐(0) 编辑