背景
开这个专题,总结归纳高频算法题
自从开了这个专栏几个月过去了,今天是7月4号,leetcode与剑指offer自选的些主要题目刷了完了第一遍。计划开始二刷,这次会把剑指offer的相关题目也补充进来,同时也会整理下那几道题一起学习较佳,另外二刷时针对每一题从以下角度思考:
1. 为什么要考这道题,即考点,这道题的背景条件,哪些条件发生变化时,对代码实现影响比较大;
2. 相比一刷时的改进点,不同方法对应的时间复杂度,空间复杂度;
3. 根据这道题,发散思维,能够联想到什么,有没有什么好的使用场景;
4. 集中精力,按专题梳理,刷完每个专题后分析自己薄弱点;
5. 整理leetcode与剑指offer相关经典题目;
为了更好的梳理学习重要点,给予评分
排序
快速排序-重点 10分
查找
基础热身(八大排序与七大查找)
八大排序 (快速排序 10分,要求会手写)
数组
二分查找
L-代表leetcode中出现过的
J-代表剑指offer中出现过的
链表专题(重点)
反转链表(L-206,J-24) : 栈,原地反转,递归,还需加强递归的理解
反转链表II(L-92): 这道题时上一题的升级版,注意条件与思路
从尾到头打印链表(J-6):如果不允许改变原有链表,则使用栈,如可以改变,则可以用递归的方法
K个一组翻转(L-25,重点,高频,栈,尾插法,递归: 需要熟练掌握这道题,这道题的多种实现方法,可以涵盖前面三道
旋转链表(L-61)
合并两个有序链表(L-21,J-25): 迭代与递归两种方法 10分
合并K个链表23 (分治,递归,优先队列,可以不新建节点,优化空间复杂度,不熟) 10分
删除链表的倒数第N个节点(L-19,J-22相似)
删除链表中的节点 (L-237,J-18)
链表中环的检测(L-141)
非循环单链表相交 (L-160,J-52) 需要二刷
两个带环的单链表相交,若相交,返回交点
两数相加 (L-2) : 今天自己写了下答案,发现跟以前自己写的都不一样,相比而言更优化了些
回文链表234(栈,栈的优化,链表的反转)
复制复杂链表(L-138,J-35,如果是复杂链表无环,则可以考虑迭代复制的方法,如果是有环的,则可以考虑hash)
待确认:一个奇数位升序、偶数位降序的单向无环链表,排成一个有序链表
二叉树(前序 中序 后序 层次的递归 非递归方法 重点 )前、中、后、层四种对应的 递归 迭代 等方法是非常基础与重要的,必须熟练掌握
层次遍历 ( 注意 递归与迭代 还有双指针的使用)
平衡二叉树110 (自顶向下与自底向上的方法 对应的时间复杂度与空间复杂度)
搜索二叉树
堆
215-数组中的第K个最大元素(堆排序,与二分查找结合的快速排序) 10分
双指针/滑动窗口
76. 最小覆盖子串 (待刷,第一次未成功)
30. 串联所有单词的子串
76. 最小覆盖子串
159. 至多包含两个不同字符的最长子串
209. 长度最小的子数组
239. 滑动窗口最大值
567. 字符串的排列
632. 最小区间
727. 最小窗口子序列
41.缺失的第一个正数 (这道题没有用到双指针,属于技术型解题,可以跟26提对比下)
三数之和15 (需要二刷)
接雨水43 (注意双指针的思想)
字符串操作 (主要的考点是什么)
栈
动态规划
85. 最大矩形 (没看懂 需要二刷)
DFS
回溯