![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
mlxaaa
这个作者很懒,什么都没留下…
展开
-
算法与数据结构(回溯算法)
回溯算法 是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。 但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。 代码模板:通常为了记录路径我们会采用一个path来记录访问的路径,当访问结束后将path中的数据回退。 回溯代码流程大概如下面所示: // 通过path记录路径 void backtrace(string s, vector<string>& path, vector<vector<str原创 2020-12-08 13:48:21 · 115 阅读 · 0 评论 -
算法与数据结构(区间合并)
区间合并 区间合并主要是用来处理有区间重叠问题的算法 例如:lc 56、lc 986 算法的关键点就是:按照区间的左端点排序,因此在排完序的列表中,可以合并的区间一定是连续的。 vector<vector<int>> merge(vector<vector<int>>& intervals) { sort(intervals.begin(), intervals.end()); vector<vector<i原创 2020-12-07 16:58:26 · 252 阅读 · 0 评论 -
算法与数据结构(KMP算法)
字符串匹配算法KMP 如leetcode28题,求一个字符串是否和另一个字符串中的子串相匹配,如text = “hello”, pattern = “ll”,匹配的头坐标就是2. 此题通过常规的遍历算法可以解决,算法复杂度就是O(M^N),M是text的字符串长度,N是pattern字符串的长度。 通过KMP算法可以简化算法复杂度,达到O(M+N)的算法复杂度。 KMP算法的核心就是寻找needle子串中是否存在相同的后缀与前缀并记录下来,记录的数组称为next数组,next[j]=k,表示pattern中原创 2020-12-04 14:34:38 · 93 阅读 · 0 评论 -
算法与数据结构(动态规划)
动态规划 动态规划题目的难点在于如何思考出用动态规划求解,以及动态规划的状态转移方程。 TIPS: 当出现算法复杂度为指数增长时,我们就可以考虑是否存在动态规划的解法。 动态规划题目类型分类: 背包问题: 0/1背包: lc416(简化为1维数组的时候为什么会从后往前遍历?) 完全背包(无限背包) 最长公共子序列(LCS) 最长上升子序列(LIS) 最长回文子序列 最长递增子序列 最长回文串 ...原创 2020-11-30 17:28:45 · 79 阅读 · 0 评论 -
算法与数据结构(树)
树 写树题目的关键就是学会写递归函数。 写好递归函数的难点就在于会讲将大问题分割为同等的小问题。原创 2020-11-25 16:51:07 · 59 阅读 · 0 评论 -
算法与数据结构(链表)
链表题目 一般的链表题目考察的是对链表类型数据结构的操作,对于链表来说常见的操作有: (1)链表题目经常会出现返回头指针,为了方便进行统一操作,经常会给输入的链表创建一个临时的头指针。 例如将两个链表进行排序并返回头指针,可以写一下代码发现,如果不创建一个临时的头指针会多写一个判断来得到排序后的头指针。如果创建一个头指针其实就可以优化代码,少写一个判断来得到头节点的逻辑 (2)链表常见的骚操作 - 一个链表进行的操作:翻转、复制 - 两个链表进行的操作:求两个链表的交点(通过骚操作“第一轮让两个到达末尾的节原创 2020-11-23 17:04:53 · 67 阅读 · 0 评论