——每次刷题之前看一遍本篇指南
刷题方法
首先,明确题目要求:
-
- 题设是什么?
- 要我做什么?
- 函数处理什么返回什么?
- 数据有序否?范围多大?数量多少?是否有规律?
- 对算法的时空复杂度要求如何?
————————————————————————————————————————————
其次,思考的大致顺序:
-
- 题目是建立在哪个(些)数据结构上的,是否能用某种数据结构的常见处理方法解决?
- 题目可能是哪个常见算法类型(贪心,分治,回溯,动规等)?是否能用某种经典解决方法解决?
————————————————————————————————————————————
再次,一些重要的注意事项:
-
- 下笔之前一定要形成较为明确完整的思路,不要顺其自然,然后陷入细节忘记整体思路;
- 编码阶段遇到困难时要判断清楚是编码本身比较困难还是思路推进比较困难,如果可能是思路的问题,多回退;
- 要自信平和,不要好大喜功,不要自我攻击,略有所得是理想的常态。
————————————————————————————————————————————
最后,必须的复杂度分析练习和Mind Palace的构建:
-
- 根据在CSCI-570中学会的几种复杂度分析方法(时空,最值/平摊/概率平摊)练习复杂度分析,每一题都要做分析,写入解题报告;
- 根据题目的分类和用到的数据结构/算法思想进行分类(经典算法/数据结构的基础方法/特别方法,一种观察技巧/特点应用等,待完善),写入解题报告;
- 及时复习,复习本周/上周做过的题目以唤醒记忆,按照Leetcode有序的题目组织复习题型,循序渐进加深理解。