- 切碎知识点 (每一道题目都考了什么知识点,从题解中学到了什么骚操作,语言的精妙处理)
- 刻意联系(对于每学到的一种操作,对于同类型不同的题型差异在哪里,手撸的过程进一步总结,到最后要做到每碰到一道题能够在脑子中快速模拟多种不同的解法)
- 反馈(从自己的反馈,助教,老师的反馈)
- 理解题目(是否排序,边界条件)
- 所有可能的解法 (注意是否刻意不 over-do, 以减少时间/空间复杂度)
- 对比时间空间复杂度
- optimal
- 多写
- 尝试自己写 test case
-
第一遍
- 10 分钟读题思考
- 没有思路,直接题解
- 悲伤默写解法
-
第二遍
- 自己写并且体会
-
第三遍
- 过一天重复做题
- 对不同解法进行专项练习
-
第四遍
- 过一周重复练题
-
第五遍
- 面试前恢复训练
-
数组
- append O(1)
- lookup O(1)
- ** insert O(n)
- ** delete O(n)
-
链表
- insert O(1)
- delete O(1)
- lookup O(n)
- append O(1)
-
调表
- 所有的操作都是 O(logn)的操作,综合表现最好,需要进一步了解其应用/实现方式
题号 名称 Github 链接 解题心得 已经刷遍数 难度 283 移动 0 快慢指针,判断慢指针指向的对象,什么时候该走,什么时候不该走 2 简单 70 爬楼梯 典型的斐波那切数列问题,三个变量,f1, f0, fn 用来计算每一步的步数,因为根据 f_n = f_n-1 + f_n-2 2 简 11 盛水最多的容器 双指针问题,需要大概理解为什么移动小的柱子(因为移动大的柱子并不会让盛的水变得更大)。注意移动指针问题 if else 或者 if continue 的使用 1 中等 15 三数之和 注意指针的移动方向,什么时候一个一个移动,什么时候一起移动。也要注意审题。就是题目中的重复的三元组,如果有重复元素的处理方法。 1 中等 24 两两交换链表节点 1 中等 题号 名称 Github 链接 解题心得 已经刷遍数 难度 26 删除排序数组重复项 快慢指针,判断慢指针指向的对象,什么时候该走,什么时候不该走 2 简单 189 翻转数组 偏逻辑观察问题,如果额外空间,用 python 可以达到常数级时间复杂度。但是不符合题目要求。 可以通过三次翻转数组,时间复杂度为 O(n),空间复杂度为 O(1) 2 简 1 两数之和 使用哈希表或者排序使用双指针 2 简单 66 加 1 无特别算法,正常指针运算 2 简单 21 合并有序链表 第一次接触链表操作不太熟悉。 注意!链表的链接只能通过 node.next 进行 assign。 而 =号的操作把某个 node 赋值给变量,和其他 node 之间的联系并没有打破或者建立 1 简单 88 合并有序数组 注意审题,已经对于 python 或者其他语言在内存中位置的判断。重新学习题解中的浅拷贝用法 1 简单 21 接雨水 这道题难的是在思维方式,目前的知识只用到了双指针,需要把本周的双指针重新复习一下常见的操作方式,包括快慢指针。例如,为什么右边最高的墙比左边最高的墙高,就可以继续移动右边的指针,实时计算容积。 1 难