![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法框架
各种进阶类型的算法汇总
专注于计算机视觉的AndyJiang
这个作者很懒,什么都没留下…
展开
-
区间DP之合并石头的最低成本
LeetCode 1000. 合并石头的最低成本有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数。找出把所有石头合并成一堆的最低成本。如果不可能,返回 -1 。示例 1:输入:stones = [3,2,4,1], K = 2输出:20解释:从 [3, 2, 4, 1] 开始。合并 [3, 2],成本为 5,剩下 [5, 4, 1]。合并 [4, 1],成本为 5,剩下 [5原创 2020-09-10 15:30:20 · 283 阅读 · 0 评论 -
算法进阶之滑动窗口解题套路
滑动窗口/* 滑动窗口算法框架 */void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; int valid = 0; while (right < s.size()) { // c 是将移入窗口的字符原创 2020-06-05 15:39:58 · 285 阅读 · 0 评论 -
算法进阶之双指针
双指针双指针技巧分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。快慢指针的常见算法判定链表中是否含有环单链表的特点是每个节点只知道下一个节点,所以一个指针的话无法判断链表中是否含有环的。如果链表中不含环,那么这个指针最终会遇到空指针 null 表示链表到头了,这还好说,可以判断该链表不含环。但是如果链表中含有环,那么这个指针就会陷入死循环,因为环形数组中没有 null 指针作为尾原创 2020-06-05 15:39:27 · 142 阅读 · 0 评论 -
算法进阶之BFS 算法
BFS 算法BFS 的核心思想应该不难理解的,就是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,我们写 BFS 算法都是用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度比 DFS 大很多.BFS 出现的常见场景就是让你在一幅「图」中找到从起点 start 到终点 target 的最近距离.这个广义的描述可以有各种变体,比如走迷宫,有的格子是围墙不能走,从起点到终点的最短距离是多少?原创 2020-06-05 15:39:05 · 1615 阅读 · 1 评论 -
算法进阶之二分查找详解
二分查找详解int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else if (nu原创 2020-06-05 15:38:32 · 123 阅读 · 0 评论 -
算法进阶之回溯算法详解
回溯算法详解解决一个回溯问题,实际上就是一个决策树的遍历过程需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。回溯算法的框架:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backt原创 2020-06-05 15:38:11 · 252 阅读 · 0 评论 -
算法进阶之动态规划
动态规划动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。动态规划就这么简单,就是穷举就完事了?我看到的动态规划问题都很难啊!首先,动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷原创 2020-06-05 15:37:23 · 148 阅读 · 0 评论 -
算法进阶之回溯、动规、递归、贪心
回溯算法result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择动态规划第一步骤:定义数组元素的含义 dp[]...原创 2020-05-08 13:09:32 · 236 阅读 · 0 评论