LeetCode题型分类与经典题目
其他
2021-01-27 04:35:14
阅读次数: 0
1.数组和字符串
题号 |
题名 |
难度 |
技巧 |
链接 |
1 |
两数之和 |
简单 |
1.暴力迭代 2.hashmap |
|
3 |
无重复字符的最长子串 |
中等 |
滑动窗口 hashmap left = Math.max(left,map.get(s.charAt(i))+1); |
|
5 |
最长回文子串 |
中等 |
动态规划 |
|
7 |
整数反转 |
简单 |
逐位处理 %10得个位数,注意上下线7和-8 |
|
8 |
字符串转换整数(atoi) |
中等 |
long计算int,逐位判断 |
|
11 |
盛最多水的容器 |
中等 |
双指针 贪心 |
|
14 |
最长公共前缀 |
简单 |
遍历 |
|
15 |
三数之和 |
中等 |
排序后固定一位,双指针判断后面的点 |
|
26 |
删除排序数组中的重复项 |
简单 |
双指针,快慢指针 |
|
28 |
实现strStr() |
简单 |
1.substring 2.KMP 动态规划 |
|
36 |
有效的数独 |
中等 |
1.三hashmap |
|
38 |
外观数列 |
简单 |
迭代 |
|
41 |
缺失的第一个正数 |
困难 |
抽屉原理 |
|
48 |
旋转图像 |
中等 |
1.单向翻转,再对角线交换 2.找规律i和n-i-1 |
|
49 |
字母异位词分组 |
中等 |
1.字符串排序 hash 2.记录26字符出现次数 |
|
54 |
螺旋矩阵 |
中等 |
数组边界问题 |
|
66 |
加一 |
简单 |
数学,倒序进位,%取余 |
|
73 |
矩阵置零 |
中等 |
1.记录第一行第一列信息,标记其他行列到1行1列,替换其他列,再将1行1列换掉 2.复制一份数组标记 |
|
76 |
最小覆盖子串 |
困难 |
滑动窗口 |
|
122 |
买卖股票的最佳时机II |
简单 |
波峰波谷 |
|
125 |
验证回文串 |
简单 |
双指针 记得加char的校验 |
|
128 |
最长连续序列 |
困难 |
hashset/并查集 |
|
136 |
只出现一次的数字 |
简单 |
异或 |
|
167 |
两数之和II-输入有序数组 |
简单 |
|
|
189 |
旋转数组 |
简单 |
1.k次旋转,每次一个元素 2.先整体翻转,在分别翻转前k个和后面的数组(k要取余) |
|
217 |
存在重复元素 |
简单 |
1.排序比较 2.哈希集 |
|
227 |
基本计算器II |
中等 |
麻烦 |
|
238 |
除自身以外数组的乘积 |
中等 |
正反遍历数组相乘 |
|
239 |
滑动窗口最大值 |
困难 |
双端队列 linkedList |
|
242 |
有效的字母异位词 |
简单 |
1.排序比较 2.hashmap 3.26位字母数组加减得0 |
|
283 |
移动零 |
简单 |
游标index |
|
287 |
寻找重复数 |
中等 |
1.Floyd 2.二分法 抽屉原理 |
|
289 |
生命游戏 |
中等 |
麻烦 |
|
334 |
递增的三元子序列 |
中等 |
双指针 |
|
344 |
反转字符串 |
简单 |
双指针 |
|
350 |
两个数组的交集II |
简单 |
1.排序,双指针 2.hashmap计数 |
|
387 |
字符串中的第一个唯一字符 |
简单 |
hashmap |
|
409 |
最长回文串 |
简单 |
1.字符数组 2.哈希表 |
|
454 |
四数相加II |
中等 |
hashmap存两数 |
|
2.链表
题号 |
题名 |
难度 |
技巧 |
链接 |
2 |
两数相加 |
中等 |
链表 进位 哨兵节点 |
|
19 |
删除链表的倒数第N个节点 |
中等 |
1.两次遍历,删除第L-N+1个,2.一次遍历,快慢双指针 |
|
21 |
合并两个有序链表 |
简单 |
1.递归(终止条件+返回值+递归内容) 2.迭代 |
|
23 |
合并K个排序链表 |
困难 |
1.priorityQueue heap,最小堆 2.归并排序 |
|
83 |
删除排序链表中的重复元素 |
简单 |
快慢指针 |
|
138 |
复制带随机指针的链表 |
中等 |
哈希表+1.递归 2.迭代 |
|
141 |
环形链表 |
简单 |
1.hashset 2.快慢双指针 |
|
142 |
环形链表II |
中等 |
floyd |
|
148 |
排序链表 |
中等 |
归并排序链表 |
|
160 |
相交链表 |
简单 |
1.hashset 2.双指针链表交换 |
|
206 |
反转链表 |
简单 |
1.迭代 临时变量记录位置 2.递归 |
|
234 |
回文链表 |
简单 |
1.复制到数组使用双指针 2.快慢指针+哨兵节点+翻转链表 |
|
237 |
删除链表中的节点 |
简单 |
链表节点 值转移 |
|
328 |
奇偶链表 |
中等 |
双链表拼接 三节点 |
|
3.树和图
题号 |
题名 |
难度 |
技巧 |
链接 |
94 |
二叉树的中序遍历 |
中等 |
1.树遍历的通用递归法 2.经典迭代模板 |
|
98 |
验证二叉搜索树 |
中等 |
1.递归 2.迭代 3.中序遍历 |
|
99 |
恢复二叉搜索树 |
困难 |
中序遍历 |
|
101 |
对称二叉树 |
简单 |
1.递归 2.迭代 |
|
102 |
二叉树的层次遍历 |
中等 |
1.递归 分层标识 |
|
103 |
二叉树的锯齿形层次遍历 |
中等 |
与102相似 1.DTS递归模板,2.BTS迭代 |
|
104 |
二叉树的最大深度 |
简单 |
DFS 1.递归 2.迭代 |
|
105 |
从前序与中序遍历序列构造二叉树 |
中等 |
递归+分治+二叉树特性 |
|
106 |
从中序与后序遍历序列构造二叉树 |
中等 |
|
|
108 |
将有序数组转换为二叉搜索树 |
简单 |
1.递归 |
|
112 |
路径总和 |
简单 |
|
|
113 |
路径总和II |
中等 |
|
|
116 |
填充每个节点的下一个右侧节点指针 |
中等 |
DFS递归 BFS迭代 |
|
124 |
二叉树中的最大路径和 |
困难 |
递归 dfs 求每个节点最大权值 |
|
127 |
单词接龙 |
中等 |
|
|
130 |
被围绕的区域 |
中等 |
dfs从边界开始,将边界的O转为A,下次遍历将A恢复为O |
|
144 |
二叉树的前序遍历 |
中等 |
|
|
145 |
二叉树的后序遍历 |
困难 |
|
|
200 |
岛屿数量 |
中等 |
相邻1置0 图的DFS递归 BFS迭代 |
|
207 |
课程表 |
中等 |
|
|
210 |
课程表II |
中等 |
|
|
230 |
二叉搜索树中第K小的元素 |
中等 |
1.构建BTS的中序遍历模板,递归 2.迭代,二叉树中序遍历模板 |
|
236 |
二叉树的最近公共祖先 |
中等 |
递归 dfs |
|
315 |
计算右侧小于当前元素的个数 |
困难 |
|
|
329 |
矩阵中的最长递增路径 |
困难 |
|
|
437 |
路径总和III |
简单 |
|
|
547 |
朋友圈 |
中等 |
1.dfs 2.bfs 3.并查集 |
|
733 |
图像渲染 |
简单 |
|
|
990 |
等式方程的可满足性 |
中等 |
并查集 |
|
4.回溯算法
题号 |
题名 |
难度 |
技巧 |
链接 |
10 |
正则表达式匹配 |
困难 |
|
|
17 |
电话号码的字母组合 |
中等 |
回溯 非通用问题 |
|
22 |
括号生成 |
中等 |
1.回溯 2.动态规划 |
|
44 |
通配符匹配 |
困难 |
|
|
46 |
全排列 |
中等 |
回溯法模板 递归 |
|
78 |
子集 |
中等 |
同46 回溯法模板 递归 |
|
79 |
单词搜索 |
中等 |
回溯 从每一个点开始找,按照字符串逐位比较,不浪费时空 |
|
131 |
分割回文串 |
中等 |
回溯+dfs+动态规划 |
|
212 |
单词搜索II |
困难 |
字典树+dfs回溯 |
|
301 |
删除无效的括号 |
困难 |
dfs bfs |
|
5.排序和搜索
题号 |
题名 |
难度 |
技巧 |
链接 |
4 |
寻找两个有序数组的中位数 |
困难 |
二分 |
|
33 |
搜索旋转排序数组 |
中等 |
二分法 先看左右是否有序,再看target是否存在区间 |
|
34 |
在排序数组中查找元素的第一个和最后一个位置 |
中等 |
二分法 左右边界细节 |
|
56 |
合并区间 |
中等 |
标记left,不断比较right和下一个数组的left并同时记录下标 |
|
75 |
颜色分类 |
中等 |
荷兰国旗问题 1.三指针2.分别统计个数 |
|
88 |
合并两个有序数组 |
简单 |
双指针 |
|
162 |
寻找峰值 |
中等 |
1.最大堆 2.遍历比较 |
|
215 |
数组中的第K个最大元素 |
中等 |
最小堆 默认 |
|
240 |
搜索二维矩阵II |
中等 |
1.二分法 x 2.从右上角找 √ |
|
278 |
第一个错误的版本 |
简单 |
二分( 递归/迭代实现) |
|
324 |
摆动排序II |
中等 |
|
|
347 |
前K个高频元素 |
中等 |
hashmap priorityQueue 最小堆n1,n2 n1-n2 /最大堆n2,n1 n1-n2 |
|
378 |
有序矩阵中第K小的元素 |
中等 |
1.优先队列(不推荐)2.二分 |
|
875 |
爱吃香蕉的珂珂 |
中等 |
二分 |
|
6.动态规划
题号 |
题名 |
难度 |
技巧 |
链接 |
53 |
最大子序和 |
简单 |
动态规划 dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);dp2[i]=Math.max(dp[i],dp2[i-1]); |
|
55 |
跳跃游戏 |
中等 |
动态规划 max = Math.max(max,i+nums[i]); |
|
62 |
不同路径 |
中等 |
动态规划 dp[i][j] = dp[i-1][j]+dp[i][j-1]; |
|
70 |
爬楼梯 |
简单 |
动态规划 dp[i] = dp[i-1]+dp[i-2] |
|
121 |
买卖股票的最佳时机 |
简单 |
动态规划 dp[天数][购买次数][持有状态] |
|
122 |
买卖股票的最佳时机II |
简单 |
|
|
123 |
买卖股票的最佳时机III |
困难 |
|
|
139 |
单词拆分 |
中等 |
动态规划 dp[i]&&wordDict.contains(s.substring(i,j)) |
|
140 |
单词拆分II |
困难 |
|
|
152 |
乘积最大子序列 |
中等 |
动态规划 max = Math.max(nums[i], max * nums[i]);min = Math.min(nums[i], min * nums[i]); |
|
188 |
买卖股票的最佳时机IV |
困难 |
|
|
198 |
打家劫舍 |
简单 |
动态规划 dp[i]=max(dp[i-1],dp[i-2]+nums[i-1]) |
|
279 |
完全平方数 |
中等 |
动态规划 dp[i] = Math.min(dp[i],dp[i-j*j]+1); |
|
300 |
最长上升子序列 |
中等 |
动态规划 dp[i] = Math.max(dp[i],dp[j]+1) |
|
309 |
最佳买卖股票时机含冷冻期 |
中等 |
|
|
309 |
最佳买卖股票时机含冷冻期 |
中等 |
动态规划 |
|
312 |
戳气球 |
困难 |
|
|
322 |
零钱兑换 |
中等 |
动态规划 dp[i] = Math.min(dp[i],dp[i-coins[j]]+1) 注意边界问题 |
|
435 |
无重叠区间 |
中等 |
贪心 |
|
452 |
用最少数量的箭引爆气球 |
中等 |
贪心 |
|
673 |
最长递增子序列的个数 |
中等 |
|
|
714 |
买卖股票的最佳时机含手续费 |
中等 |
|
|
887 |
鸡蛋掉落 |
困难 |
dp[k][m] = dp[k][m-1]+dp[k-1][m-1]+1; |
|
1143 |
最长公共子序列 |
中等 |
二维dp |
|
7.设计问题
题号 |
题名 |
难度 |
技巧 |
链接 |
146 |
LRU缓存机制 |
中等 |
hash + deque |
|
155 |
最小栈 |
简单 |
辅助栈 |
|
208 |
实现Trie(前缀树) |
中等 |
字节跳动 每个节点有26位可供存下一节点的引用 |
|
295 |
数据流的中位数 |
困难 |
优先队列 大顶堆+小顶堆 |
|
297 |
二叉树的序列化与反序列化 |
困难 |
前序遍历和逆序生成 |
|
341 |
扁平化嵌套列表迭代器 |
中等 |
|
|
380 |
常数时间插入、删除和获取随机元素 |
中等 |
list + map |
|
384 |
打乱数组 |
中等 |
random方法 |
|
648 |
单词替换 |
中等 |
使用308题结果 |
|
8.数学
题号 |
题名 |
难度 |
技巧 |
链接 |
13 |
罗马数字转整数 |
简单 |
switch |
|
29 |
两数相除 |
中等 |
左移:*2^n 最高评论为解 |
|
50 |
Pow(x,n) |
中等 |
快速幂等法 halfhalfrest |
|
69 |
x的平方根 |
简单 |
牛顿迭代法 x = (x + a / x) / 2; |
|
149 |
直线上最多的点数 |
困难 |
|
|
166 |
分数到小数 |
中等 |
hashmap记录整数部分便于插入符号,余数不断*10/被除数 |
|
171 |
Excel表列序号 |
简单 |
int char转换 num = s.charAt(i) - ‘A’ + 1; ans = ans * 26 + num; |
|
172 |
阶乘后的零 |
简单 |
求5的个数 |
|
179 |
最大数 |
中等 |
|
|
202 |
快乐数 |
简单 |
set % / |
|
204 |
计数质数 |
简单 |
厄拉多塞筛法 |
|
326 |
3的幂 |
简单 |
return (Math.log10(n) / Math.log10(3)) % 1 == 0; |
|
412 |
FizzBuzz |
简单 |
%取余 |
|
9.其他
题号 |
题名 |
难度 |
技巧 |
链接 |
20 |
有效的括号 |
简单 |
辅助栈 |
|
42 |
接雨水 |
困难 |
动态规划+双指针 |
|
84 |
柱状图中最大的矩形 |
困难 |
|
|
118 |
杨辉三角 |
简单 |
动态规划 row.add(pre.get(j-1)+pre.get(j)); |
|
150 |
逆波兰表达式求值 |
中等 |
栈 |
|
169 |
多数元素 |
简单 |
1.hash 2.排序后取中数 3.投票算法 |
|
190 |
颠倒二进制位 |
简单 |
左移右移 与& |
|
191 |
位1的个数 |
简单 |
n = n&(n-1) 可消除二进制数字最后一个1 |
|
218 |
天际线问题 |
困难 |
|
|
268 |
缺失数字 |
简单 |
1.排序 2.哈希 3.异或 |
|
292 |
Nim游戏 |
简单 |
n%4!=0 |
|
319 |
灯泡开关 |
中等 |
return (int)Math.sqrt(n); |
|
371 |
两整数之和 |
简单 |
异或算和,与+左移算进位 |
|
406 |
根据身高重建队列 |
中等 |
|
|
461 |
汉明距离 |
简单 |
return Integer.bitCount(x ^ y); |
|
621 |
任务调度器 |
中等 |
设计 执行完所有任务的时间至少为 (p - 1) * (n + 1) + 1 |
|
877 |
石子游戏 |
中等 |
return true |
|
转载自blog.csdn.net/weixin_43859729/article/details/110678439