前言
想看Leetcode总集篇的点它点它:Leetcode总集篇。
算法和算法题的任务目标,主要可分为:“增 删 改 查” 这四种。
数据结构则包括:数组,字符串,堆,栈,队列,链表,树,集合等等。
所以在数组,字符串,堆,栈,队列,链表,树,集合等等这些不同的数据结构上,执行 “增 删 改 查”这任意一种(或以上)任务,它们之间只需排列组合一番,就形成了现在数量繁多的算法题目(剑指offer,LeetCode)。前人在解决这些问题时,也逐渐总结形成了针对不同数据结构,执行不同任务时候的一些方法(如:快慢针——链表/查找,二分查找——数组/查找,十排序——数组/修改)。
因此解决剑指offer和LeetCode的题目时,往往是考验我们对其中的算法和数据结构的理解。甚至在特定数据结构中进行的 “增 删 改 查” 操作,所能使用的算法,应该是比较固定的。比如,在有序数组中执行查找任务,我们马上就要想到二分查找。这些经验虽然不一定是百试百灵,但是还是非常实用的。
刷题建议:第一次刷:5分钟想不出来解法,直接看答案。
二刷或以上:不能秒想出来任意一个解法,直接看答案;5分钟想不出最优解,直接看答案。
注:即使想到用什么解法,但是不知道怎么实现,其实相当于不会。
题目索引
剑指offer虽然牛客和力扣上的题目不太一样,但是建议是两边都要刷。
我的索引结构是:
数据结构1:
|____ 任务目标 - 题目1
|____ 任务目标 - 题目2
|____ …
|____ 特殊算法:
|____ |____ 任务目标 - 题目n
|____ |____ 任务目标 - 题目n+1
|____ |____ …
数据结构2:
|____ 任务目标 - 题目1
|____ 任务目标 - 题目2
|____ …
|____ 特殊算法:
|____ |____ 任务目标 - 题目n
|____ |____ 任务目标 - 题目n+1
|____ |____ …
…