已完成:
-
次数 时间 内容 日期 1 20min 分析+实现+总结+测试 2019.04.09 -
次数 时间 内容 日期 1 20min 分析+实现+总结+测试 2019.04.09 -
19. Remove Nth Node From End of List
次数 时间 内容 日期 1 40min 分析+实现(7min)+总结+测试 2019.04.09 -
次数 时间 内容 日期 1 16min 分析+实现+总结+测试 2019.04.09 -
次数 时间 内容 日期 1 40min 分析+实现+总结+测试 2019.04.09 -
次数 时间 内容 日期 1 20min 分析+实现+总结+测试 2019.04.09 -
次数 时间 内容 日期 1 32min 分析+实现+总结+测试 2019.04.09 -
次数 时间 内容 日期 1 38min 分析+实现+总结+测试 2019.04.10 -
232. Implement Queue using Stacks
次数 时间 内容 日期 1 33min 分析+实现+总结+测试 2019.04.10 -
次数 时间 内容 日期 1 60min 分析+实现+总结+测试 2019.04.10 2 20min 实现 2019.04.10 3 7min 实现 2019.04.10 -
次数 时间 内容 日期 1 60min 分析+实现+总结+测试 2019.04.10 2 4min 实现 2019.04.10 -
次数 时间 内容 日期 1 60min 分析+实现+总结+测试 2019.04.10 -
876. Middle of the Linked List
次数 时间 内容 日期 1 60min 分析+实现(4min)+总结+测试 2019.04.10 -
次数 时间 内容 日期 1 60min 分析+迭代实现+总结+测试 2019.04.12 2 33min 递归 2019.04.13 -
次数 时间 内容 日期 1 180min 实现(有bug)+测试 2019.04.14 2 120min 实现 2019.04.15 2 100min 分析+优化+回顾总结 2019.04.17 -
次数 时间 内容 日期 1 180min 实现+测试 2019.04.21 2 120min 实现 2019.04.22 -
次数 时间 内容 日期 1 180min 实现+测试 2019.04.22 -
次数 时间 内容 日期 1 180min 实现+测试 2019.04.23 -
606. Construct String from Binary Tree
次数 时间 内容 日期 1 180min 实现+测试 2019.04.24 -
次数 时间 内容 日期 1 180min 实现+测试 2019.04.24
总结:
- 先想解决思路,不必考虑复杂度,也不必考虑数据结构;再看每一步是否有可优化的点,从数据结构与算法的角度考虑。
- 查找优化,想hash table/hash map,但是要注意空间复杂度的提升。
- 考虑各种情况,也就是TDD中的先思考测试用例,从最简单的一个下手,可能没有时间去重构,因此需要纵观测试用例,直接考虑普适情况。
- 解决链表问题时考虑只有一个元素及head被移除的情况,通常需要添加哨兵
- 使用栈的peek或pop操作时,需要保证栈非空。
- 循环链表时,最好不要以p.next是否为空作为终止条件,因为p可能为空。
- 做这种原地操作时,一定要注意先保存原链表指针的next,再操作。
- 快慢指针判断环是很巧妙的思路。
- 涉及多个指针的,先在纸上画,画完再写程序。
- 涉及多个指针的,要注意元素个数对其的影响。
- 有数据搬运操作时,注意分析不同搬运时刻所需的代价。
- 特别注意空指针问题。
- 最终字符串取决于后面字符时,考虑倒序遍历。
- 快慢指针循环条件:奇数个节点,快指针的next不为空;偶数个节点,快指针不为空。
- 从字符串中读取数字要注意数字位数。
- 不要陷入思维定式,要注意当前问题。
- 将迭代改为递归时,想数据作用域要求清零的时刻,有时需要增加变量;递归改为迭代时在数据作用域清零的时刻手动用栈模拟。
- 有时候可以通过排序结合一些约束避免重复。
- 测试用例要考虑全面,比如多个0对于上述算法的影响。
- 存在局部遍历(分块遍历)时,可以考虑while+多个指针以不同步调来回移动的方式。