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的题也用到这种思路
位运算:计算优化,不会就最好别写哈
设计:
比如设计库表结构
设计某种数据结构等
多线程:
下篇~~~