Skip to content

whoway2017/leetcode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

leetcode题解

本项目『网页版

以最优解进行解答

Ⓜ️约定标记

  • 💦水题,只做一遍
  • Ⓜ️模板题,可记忆
  • ⭐️启发性题,记忆+学习
  • ✅已完成题目,待定级别

✅刷题顺序

✅01.数组

1.1.数组的遍历

题号 C++11 Java8 Python3
⭐️485. 最大连续1的个数 1
💦495. 提莫攻击 1
414. 第三大的数 1
⭐️628. 三个数的最大乘积 1

1.2.统计数组中的元素

题号 C++11 Java8 Python3
645. 错误的集合 1
697. 数组的度
448. 找到所有数组中消失的数字 1
⭐️442. 数组中重复的数据
⭐️41. 缺失的第一个正数
274. H 指数

1.3.数组的改变、移动

题号 C++11 Java8
453. 最小移动次数使数组元素相等
665. 非递减数列
283. 移动零 1

1.4.二维数组及滚动数组

题号 描述 状态
118. 杨辉三角
119. 杨辉三角 II
661. 图片平滑器
598. 范围求和 II
419. 甲板上的战舰

1.5.数组的旋转

题号 C++11 完成状态
⭐️189. 旋转数组 1
396. 旋转函数

1.6.特定顺序遍历二维数组

题号 C++11 完成状态
54. 螺旋矩阵
59. 螺旋矩阵 II
498. 对角线遍历

1.7.二维数组变换

题号 描述 完成状态
566. 重塑矩阵
48. 旋转图像
73. 矩阵置零
289. 生命游戏

1.8.前缀和数组

题号 描述 完成状态
303. 区域和检索 - 数组不可变 模板题-前缀和 完成11.29
304. 二维区域和检索 - 矩阵不可变
238. 除自身以外数组的乘积

✅二分查找

1.二分查找应用(简单)

题号 C++11 Java8
374 猜数字大小
35 搜索插入位置
278第一个错误的版本
367 有效的完全平方数
69 6 和 9 组成的最大数字 1
441 排列硬币

2.二分查找应用(中等)

题号 C++11 Java8
34 在排序数组中查找元素的第一个和最后一个 1
540 有序数组中的单一元素
275 H 指数 II
436 寻找右区间
300 最长递增子序列
354 俄罗斯套娃信封问题
658 找到 K 个最接近的元素
162 寻找峰值
4寻找两个正序数组的中位数 1

3.二分查找与旋转数组

题号 C++11 Java8
153 寻找旋转排序数组中的最小值
154 寻找旋转排序数组中的最小值 II
33 搜索旋转排序数组 1
81 搜索旋转排序数组 II

4.二分查找与矩阵

题号 C++11 Java8
74 搜索二维矩阵
240 搜索二维矩阵 II

5.二分答案法

题号 C++11 Java8
378 有序矩阵中第 K 小的元素 1
668 乘法表中第k小的数
410 分割数组的最大值
483 最小好进制

✅02.链表

2.1.链表的删除

题号 描述 状态
Ⓜ️203. 移除链表元素 哑结点『典例』 1
⭐️237. 删除链表中的节点 1
⭐️19. 删除链表的倒数第N个节点 1

2.2.链表的遍历

2.3.链表的旋转与反转

题号 描述 题目
61. 旋转链表 找实习好像做过 1
24. 两两交换链表中的节点
206. 反转链表
92. 反转链表 II
25. K 个一组翻转链表

2.4.链表高精度加法

2.5.链表的合并

题号 描述 状态
21. 合并两个有序链表 归并模板 1
23. 合并K个升序链表 归并模板 1

✅双指针法

头尾指针

题号 C++11 Java8
345. 反转字符串中的元音字母 1
680. 验证回文字符串 Ⅱ
167. 两数之和 II - 输入有序数组 1
15. 三数之和
16. 最接近的三数之和
18. 四数之和
11. 盛最多水的容器
42. 接雨水

同向双指针、滑动窗口

题号 C++11 Java8
27 移除元素 1
26 删除有序数组中的重复项 1
80 删除有序数组中的重复项 II 1
83 删除排序链表中的重复元素 1
82 删除排序链表中的重复元素 II 1
611 有效三角形的个数
187 重复的DNA序列
643子数组最大平均数 I
674 最长连续递增序列
209 长度最小的子数组
3 无重复字符的最长子串 1
438找到字符串中所有字母异位词
567 字符串的排列
424 替换后的最长重复字符
76 最小覆盖子串
30 串联所有单词的子串

分段双指针

题号 C++11 Java8
86. 分隔链表
328. 奇偶链表
160. 相交链表
88. 合并两个有序数组 秋招考过
475. 供暖器

快慢指针

题号 描述 状态
141. 环形链表
142. 环形链表 II
143. 重排链表
234. 回文链表
457. 环形数组循环
287. 寻找重复数

✅03.字符串

3.1.字符

3.2.回文串的定义

3.3.公共前缀

3.4.单词

题号
434. 字符串中的单词数
58. 最后一个单词的长度

3.5.字符串的反转

题号 C++11 Java8
💦344. 反转字符串
541. 反转字符串 II
557. 反转字符串中的单词 III
151. 翻转字符串里的单词

3.6.字符的统计

题号 C++11 状态
💦387. 字符串中的第一个唯一字符 1
💦389. 找不同 1
💦383. 赎金信 1
💦242. 有效的字母异位词
49. 字母异位词分组
451. 根据字符出现频率排序
423. 从英文中重建数字
657. 机器人能否返回原点
551. 学生出勤记录 I
696. 计数二进制子串
467. 环绕字符串中唯一的子字符串
535. TinyURL 的加密与解密

3.7.数字与字符串间转换

题号 描述 状态
299. 猜数字游戏
412. Fizz Buzz
506. 相对名次
539. 最小时间差
553. 最优除法
537. 复数乘法
592. 分数加减运算
640. 求解方程
38. 外观数列
443. 压缩字符串
8. 字符串转换整数 (atoi)
13. 罗马数字转整数
12. 整数转罗马数字
273. 整数转换英文表示
165. 比较版本号
481. 神奇字符串

3.8.子序列

题号 描述 状态
392. 判断子序列
524. 通过删除字母匹配到字典里最长单词
521. 最长特殊序列 Ⅰ
522. 最长特殊序列 II

3.9.高精度运算

题号 C++11 状态
Ⓜ️66. 加一 1
Ⓜ️67. 二进制求和 1
Ⓜ️415. 字符串相加 1
Ⓜ️43. 字符串相乘
306. 累加数

3.10.字符串变换

题号 描述 状态
482. 密钥格式化
6. Z 字形变换
68. 文本左右对齐

3.11.字符串匹配

题号 描述 状态
28. 实现 strStr()
686. 重复叠加字符串匹配
459. 重复的子字符串
214. 最短回文串

3.12.中心拓展法

✅规律题

✅数与位运算

3.1.数字的位操作

题号 描述 状态
7. 整数反转
9. 回文数
479. 最大回文数乘积
564. 寻找最近的回文数
231. 2的幂 计算机组成 1
342. 4的幂 计算机组成 1
326. 3的幂
504. 七进制数
263. 丑数
190. 颠倒二进制位
191. 位1的个数
476. 数字的补数
461. 汉明距离
477. 汉明距离总和
693. 交替位二进制数
393. UTF-8 编码验证
172. 阶乘后的零
458. 可怜的小猪
258. 各位相加
319. 灯泡开关
405. 数字转换为十六进制数
171. Excel表列序号
168. Excel表列名称
670. 最大交换
233. 数字 1 的个数
357. 计算各个位数不同的数字个数
400. 第N个数字

3.2.简单数学题

题号 描述 状态
492. 构造矩形
29. 两数相除
507. 完美数

3.3.快速幂

3.4.二进制运算的应用

  • 3.4.1.异或的应用
题号 C++11 Java8
89 格雷编码
136 只出现一次的数字 1
137 只出现一次的数字 II 1
260 只出现一次的数字 III 1
268 丢失的数字 1
  • 3.4.2.与或非的应用
题号 C++11 Java8
371 两整数之和 1
318 最大单词长度乘积
201 2 的幂 1

✅06.栈与递归

6.1.用栈访问最后若干元素

题号 描述
682. 棒球比赛
71. 简化路径
388. 文件的最长绝对路径 有点像2020秋招华为那场了

6.2.栈与计算器

题号
150. 逆波兰表达式求值
227. 基本计算器 II
224. 基本计算器

6.3.栈与括号匹配

题号 描述
20. 有效的括号 栈-模板题
636. 函数的独占时间
591. 标签验证器
32. 最长有效括号

6.4.递归

题号
385. 迷你语法分析器
341. 扁平化嵌套列表迭代器
394. 字符串解码

✅08.哈希表

8.1.哈希表的查找、插入及删除

题号 描述 状态
💦217. 存在重复元素 简单 unordered_map模板,不重做!
633. 平方数之和 中等
349. 两个数组的交集 简单 1
128. 最长连续序列
202. 快乐数
500. 键盘行
290. 单词规律
532. 数组中的 k-diff 数对
205. 同构字符串
166. 分数到小数
466. 统计重复个数
138. 复制带随机指针的链表

8.2.哈希表与索引

题号 C++11 状态
1. 两数之和 1
167. 两数之和 II - 输入有序数组 1
599. 两个列表的最小索引总和
219. 存在重复元素 II
220. 存在重复元素 III

8.3.哈希表与统计

题号 描述 状态
594. 最长和谐子序列
350. 两个数组的交集 II
554. 砖墙
609. 在系统中查找重复文件
454. 四数相加 II
18. 四数之和

8.4.哈希表与前缀和

题号 C++11 Java8
560. 和为K的子数组 1
523. 连续的子数组和
525. 连续数组

✅09.贪心算法

9.1.数组与贪心算法

题号 C++11 Java
605 种花问题
121 买卖股票的最佳时机
122 买卖股票的最佳时机 II
561 数组拆分 I
455 分发饼干
575 分糖果
135 分发糖果
409 最长回文串
621 任务调度器
179 最大数
56 合并区间
57 插入区间
228 汇总区间
452 用最少数量的箭引爆气球
435 无重叠区间
646 最长数对链
406 根据身高重建队列
48 旋转图像
169 多数元素
215 数组中的第K个最大元素
75 颜色分类
324 摆动排序 II
517 超级洗衣机
649 Dota2 参议院 Dota2 参议院
678有效的括号字符串
420 强密码检验器

9.2.子数组与贪心算法

题号 C++11 Java
53 最大子序和
134 加油站
581 最短无序连续子数组
152 乘积最大子数组

9.3.子序列与贪心算法

题号 C++11
334 递增的三元子序列
376 摆动序列
659分割数组为连续子序列

9.4.数字与贪心

9.5.单调栈法

题号 描述 状态
496. 下一个更大元素 I
503. 下一个更大元素 II
456. 132模式
316. 去除重复字母
402. 移掉K位数字
321. 拼接最大数
84. 柱状图中最大的矩形
85. 最大矩形

✅10.树

10.1.树与递归

题号 描述 状态
100. 相同的树
222. 完全二叉树的节点个数
101. 对称二叉树
226. 翻转二叉树
437. 路径总和 III
563. 二叉树的坡度
617. 合并二叉树
508. 出现次数最多的子树元素和
572. 另一个树的子树
543. 二叉树的直径
654. 最大二叉树
687. 最长同值路径
87. 扰乱字符串

10.2.树的层次遍历

题号 C++11 Java8
102 二叉树的层序遍历 1
429N 叉树的层序遍历
690 员工的重要性
559 N 叉树的最大深度 1
662 二叉树最大宽度
671二叉树中第二小的节点
513 找树左下角的值
515 在每个树行中找最大值
637 二叉树的层平均值 1
103 二叉树的锯齿形层序遍历
107 二叉树的层序遍历 II 1
257 二叉树的所有路径
623在二叉树中增加一行
653 两数之和 IV - 输入 BST
104 二叉树的最大深度 1
111 二叉树的最小深度
112 路径总和
113 路径总和 II
129求根节点到叶节点数字之和
404左叶子之和
199 二叉树的右视图
655 输出二叉树
116 填充每个节点的下一个右侧节点指针
117 填充每个节点的下一个右侧节点指针 II

10.3.树的前序遍历

题号
144. 二叉树的前序遍历
589. N叉树的前序遍历

10.4.树的前序序列化

题号
606. 根据二叉树创建字符串
331. 验证二叉树的前序序列化
652. 寻找重复的子树
297. 二叉树的序列化与反序列化
449. 序列化和反序列化二叉搜索树

10.5.树的后序遍历

题号
145. 二叉树的后序遍历
590. N叉树的后序遍历

10.6.树的中序遍历与二叉搜索树

题号 C++11 Java8
94 二叉树的中序遍历 1
700 二叉搜索树中的搜索 1
530 二叉搜索树的最小绝对差
538 把二叉搜索树转换为累加树
230二叉搜索树中第K小的元素 1
98验证二叉搜索树 1
173二叉搜索树迭代器
669 修剪二叉搜索树
450删除二叉搜索树中的节点
110 平衡二叉树
95 不同的二叉搜索树 II
108 将有序数组转换为二叉搜索树
109 有序链表转换二叉搜索树

10.7.重构二叉树

题号
105. 从前序与中序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树

10.8.二叉树的展开

题号 描述 状态
114. 二叉树展开为链表

10.9.最近公共祖先

题号 描述 状态
235. 二叉搜索树的最近公共祖先
236. 二叉树的最近公共祖先

10.10.Morris中序遍历

题号 描述 状态
501. 二叉搜索树中的众数
99. 恢复二叉搜索树

10.11.四叉树

题号 描述 状态
558. 四叉树交集
427. 建立四叉树

✅11.动态规划

11.1.数组中的动态规划

题号 描述 状态
509. 斐波那契数 简单 1
70. 爬楼梯 简单 1
338. 比特位计数
45. 跳跃游戏 II
55. 跳跃游戏
198. 打家劫舍
213. 打家劫舍 II
650. 只有两个键的键盘
91. 解码方法
639. 解码方法 2
552. 学生出勤记录 II
123. 买卖股票的最佳时机 III
188. 买卖股票的最佳时机 IV
309. 最佳买卖股票时机含冷冻期
32. 最长有效括号
264. 丑数 II
313. 超级丑数
403. 青蛙过河

11.2.子数组、子序列中的动态规划

题目
689. 三个无重叠子数组的最大和
413. 等差数列划分
446. 等差数列划分 II - 子序列
368. 最大整除子集
416. 分割等和子集
279. 完全平方数

11.3.背包问题

题号
322. 零钱兑换
518. 零钱兑换 II
474. 一和零
494. 目标和
377. 组合总和 Ⅳ

11.4.矩阵中的动态规划

题号 描述 状态
62. 不同路径
63. 不同路径 II
64. 最小路径和
120. 三角形最小路径和
576. 出界的路径数
688. “马”在棋盘上的概率
221. 最大正方形
629. K个逆序对数组
174. 地下城游戏
96. 不同的二叉搜索树
329. 矩阵中的最长递增路径

11.5.动态规划与字符串匹配

题号 描述 状态
583. 两个字符串的删除操作
72. 编辑距离
97. 交错字符串
115. 不同的子序列
516. 最长回文子序列
132. 分割回文串 II
131. 分割回文串
139. 单词拆分
140. 单词拆分 II
514. 自由之路
10. 正则表达式匹配
44. 通配符匹配

11.6状态压缩动态规划

题号 描述 状态
464. 我能赢吗
691. 贴纸拼词
698. 划分为k个相等的子集
638. 大礼包
473. 火柴拼正方形

11.7区间中的动态规划

题号 描述
486. 预测赢家
664. 奇怪的打印机
375. 猜数字大小 II
312. 戳气球
546. 移除盒子

11.8.树形dp

题号 描述 状态
337. 打家劫舍 III
124. 二叉树中的最大路径和

11.9.数位dp

题号 描述 状态
233. 数字 1 的个数
600. 不含连续1的非负整数

✅12.设计数据结构(ADT)

12.1.设计—栈与队列

题号 C++11 Java8
225 用队列实现栈 1
232 用栈实现队列 1
284 顶端迭代器
622 设计循环队列
641设计循环双端队列
155 最小栈 1

12.2.设计—哈希表

题号 C++11 Java8
676 实现一个魔法字典
355 设计推特
380 O(1) 时间插入、删除和获取随机元素
381O(1) 时间插入、删除和获取随机元素 - 允

12.3.设计—哈希与双向链表

题号 C++11 Java8
432 全 O(1) 的数据结构
146 LRU 缓存机制 1
460 LFU 缓存

12.4.设计—前缀树

题号 C++11 Java8
208 实现 Trie (前缀树) 1
211 添加与搜索单词 - 数据结构设计
648 单词替换
386 字典序排数
677 键值映射
472 连接词
421 数组中两个数的最大异或值
212 单词搜索 II
336 回文对
440字典序的第K小数字

12.5.设计—堆

题号 C++11 Java8
23 合并K个升序链表 1
373 查找和最小的K对数字
378 有序矩阵中第 K 小的元素
632 最小区间
347 前 K 个高频元素 1
692 前K个高频单词
502 IPO
630 课程表 III
407 接雨水 II
295 数据流的中位数
480滑动窗口中位数

12.6.设计—树状数组

题号 描述 状态
307. 区域和检索 - 数组可修改
315. 计算右侧小于当前元素的个数
493. 翻转对
327. 区间和的个数
673. 最长递增子序列的个数

12.7.线段树

题号
699. 掉落的方块

12.8.平衡树(set/map)

题号
352. 将数据流变为多个不相交区间
218. 天际线问题
363. 矩形区域不超过 K 的最大数值和

✅13.图与搜索

13.1图的建立与应用

题号 C++11 Java8
565 数组嵌套

13.2.深度优先搜索

题号 C++11 Java8
17 电话号码的字母组合
397 整数替换 1

13.3回溯法

题号 C++11 Java8
526 优美的排列
401二进制手表
36 有效的数独
37 解数独
51 N 皇后
52 N皇后 II
77 组合 1
39 组合总和
216 组合总和 III
40 组合总和 II
46 全排列 1
47 全排列 II
31 下一个排列 1
556 下一个更大元素 III
60 排列序列 1
491递增子序列
78 子集
90子集 II
79 单词搜索
93 复原 IP 地址
332 重新安排行程

13.4.回溯法与表达式

题号 C++11 Java8
241 为运算表达式设计优先级
282 给表达式添加运算符
679 24 点游戏

13.5.回溯法与括号

题号 C++11 Java8
22 括号生成
301 删除无效的括号

13.6.回溯法与贪心

题号 C++11 Java8
488 祖玛游戏

13.7.广度优先搜索

题号 C++11 Java8
133 克隆图
200 岛屿数量
695 岛屿的最大面积
463 岛屿的周长
542 01 矩阵
130 被围绕的区域
417太平洋大西洋水流问题
529 扫雷游戏
127 单词接龙
126 单词接龙 II
433最小基因变化
675 为高尔夫比赛砍树

13.8.并查集

题号 C++11 Java8
547 省份数量
684 冗余连接
685 冗余连接 II

13.9.拓扑排序

题号 C++11 Java8
399 除法求值
207课程表
210 课程表 II

13.10.有限状态自动机

题号 C++11 Java8
65 有效数字
468 验证IP地址

✅14.小众算法

14.1.采样

按权值采样

题号 C++11 Java8
528 按权重随机选择
497 非重叠矩形中的随机点

14.2.蓄水池抽样

题号 C++11 Java8
382 链表随机节点
398 随机数索引

14.3.拒绝采样

题目分类 C++11 Java8
470 用 Rand7() 实现 Rand10()
478 在圆内随机生成点
519 随机翻转矩阵

(2)计算几何

计算几何基础

题号 C++11 Java8
593 有效的正方形
447 回旋镖的数量
223 矩形面积
149 直线上最多的点数

分类讨论法

凸包

覆盖问题

✅15.常用技巧与算法

15.1.博弈论

15.2.分块

15.3.倍增法

15.4.拓展欧几里得算法

15.5.洗牌算法

15.6.找规律

15.7.分治法

15.8.排序算法

15.9.线性筛

15.9.摩尔投票法

License

本仓库的部分内容引用书上/技术文档/网上文字(这部分内容在文中标明了出处),其余均是作者原创。
在您引用本仓库内容或者对内容进行修改演绎时,请署名并以相同方式共享,谢谢。:smile:
转载文章请在开头明显处标明该页面地址

致谢

如果你希望被添加到这个名单中,并且提交过 Issue / PR / email,请与我联系

📧 hacvhacv@qq.com

感谢以下人员对本仓库做出的贡献

参考资料

刷题目录参考自:noone_:https://leetcode-cn.com/circle/article/48kq9d/

  • 笔者对其进行了改进,并且给其加上链接

About

LeetCode题解C++11、Java8、Python3版题解🚀

Resources

License

Stars

Watchers

Forks

Contributors

Languages