LeetCode题型分类与经典题目

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