- 解决算法问题,如果有规律就利用规律缩小范围,如果没有规律就利用空间去优化时间。
- 有规律那么会用到二分法,滑动窗口,动态规划等
- 如果没有规律那么利用递归,数据结构(空间换时间)等
- 对于一些无法实现的公式,可以使用逼近原则(二分法,贪心之类)
- 查看题目中的关键字眼:顺序,数据结构
- 列举n为0,1,2,3的情况。然后观察
- 数学题多数是公式和递归还有二分法
- 数组有顺序用双指针(二分法)。二分法从两边
- 字符串的双指针(滑动窗口)。第一个指针先移动n步,第二个指针在移动,可以避免多次遍历
- 链表的双指针(滑动窗口)第一个指针先移动n步,第二个指针在移动,可以避免多次遍历
- 双指针的使用分为二分法,滑动窗口,指针交换等。有顺序使用二分法。滑动窗口如何滑动需要根据具体的问题来决定。
- 栈利用先入后出,可以判断是否合法,利用栈可以实现对特殊数据结构的遍历
- 链表基本都是使用双指针
- 队列先入先出
- 看到树就应该想到递归,队列,遍历
- 不是只有树的数据结构可以递归。所有过程为树的运算过程都可以递归
- 学习算法要注意的是算法的复杂度,算法的实现原理,实现**。要学会举一反一。不要为了学习而学习。
- 要把学习代码的参考资料放如对应的文档中
- 每一个算法要有对应的学习文档