1、刷题第一遍
5分钟:读题+思考;
有思路-直接做,写代码;没思路-直接看解法,比较不同解法的优劣;
背诵默写好这些解法。
2、刷题第二遍
马上自己写,leetcode提交,有问题-->debug修改-->debug修改-->正确;
多种解法进行比较,体会-->优化! 时间复杂度!!!
3、过了一天,再重复做题
不同解法的熟练程度-->专项练习!!
4、过了一周,反复回来练习相同的题目
5、面试前一周恢复性训练
1、Clarification:反复确认题意
2、Possible solution:尽可能多的解题思路,写出尽可能多的解法,进行分析,时间、空间复杂度分析
3、Coding:动手写起来
4、Test cases:把测试样例多列举几个
一维数据结构:
1、数组
2、链表:单链表、双向链表、循环链表
3、跳表
4、栈:递归,维护单调栈(接雨水)
5、队列
6、双端队列:滑动窗口
7、集合
8、哈希表
二维数据结构:
1、树
2、图
3、二叉搜索树:包括红黑树、AVL树
4、堆:大顶堆,小顶堆。优先队列实现
5、并查集:分组问题,有几类。
6、字典树Trie:词频统计,单词搜索。
特殊
1、位运算
2、布隆过滤器:不存储元素本身,当一个元素的二进制索引有0存在,这个元素一定不在存储中,但即使一个元素的二进制索引全为1,也不能确定这个元素就在内存中。
3、LRU Cache
1、递归、枚举
2、分治、回溯、贪心算法
3、动态规划
4、启发式搜索