leetcode刷题总结(一)


语言:Java && python,

我的做法:按 tag 刷,刷题同时熟悉数据结构,熟悉自带的API,

以下tag:

链表(LinkedList): JDK中的LinkedList类,

特点:一个接一个,内存占用较大

用途:快速增删头尾元素时可以考虑

栈(Stack):JDK8中为 Deque接口,用它作为栈使用,常用的为LinkedList,ArrayDeque,

特点:后进先出,

用途:词法分析

队列(Queue):JDK接口:Queue,不过一般我直接使用Deque,这是一个双端队列

特点:先进先出

用途:排队

字典(Map):JDK接口:Map,常用的HashMap, TreeMap,LinkedHashMap,

特点:K-V组合,O(1)时间复杂度

用途:缓存,空间换时间

堆(Heap):JDK接口:PrioryQueue

特点:按优先级进行排序

用途:任务排队

树(Tree):JDK未带此接口

特点:形成一种有层级的结构。类似于链表,不过变成了一个节点有两个子节点

用途:文件目录存储

图(Graph): JDK未带此接口

特点:点与点之间属于多对多的关系

用途:地图,

PS:有余力可多学习,我未重点刷此tag

做题技巧:

动态规划:重点是得到动态规划方程(B站闫雪菜大佬视频有讲解)

二分查找:注意边界条件

双指针(滑动窗口):滑动窗口也可以用双指针的形式来实现,窗口定长或不定长均可

深度优先搜索 && 广度优先搜索:感觉dfs更高频,这两种解法一般都出现在树,矩阵,图等题目中

递归(回溯):比如经典的八皇后问题,做题注意剪枝优化时间复杂度

快排:Top-K问题

前缀数组:顾名思义,多出现在Array,List题目中,隐约记得有道关于Tree的题也用到这种思路

位运算:计算优化,不会就最好别写哈

设计:

比如设计库表结构

设计某种数据结构等

多线程:

下篇~~~