Skip to content

descire/LeetCode

Repository files navigation

LeetCode

用 JavaScript 刷 LeetCode 不丢人 😂

  本开源项目的目的:

  • 帮助前端同学培养算法和数据结构的兴趣,喜欢上这种刷题的学习模式;
  • 提供大部分题目的解题思路

  对于刚开始接触 LeetCode 的同学,我建议:

  • 一刷:按照算法或者数据结构的分类,从 Easy 到 Medium 刷一遍,这样可以帮助你理解每一种算法和数据结构的实现以及常用技巧。
  • 二刷:可以尝试思考每一道题目是否可以用其它算法解决以及它们之间的优劣。

Hard 类型的题目相对难度比较大,一开始接触这类题目可能会把你心态刷炸,所以等基本功稳健之后,再选择通过这类题目来进阶提升。

📚文章汇总

专题总结
竞赛总结

🧭目录导航

Binary Search Algorithm(二分搜索算法)

题目 难度 解法 beats Runtime
852. 山脉数组的峰顶索引 Easy BinarySearch 98.70%
744. 寻找比目标字母大的最小字母 Easy BinarySearch 100.00%
367. 有效的完全平方数 Easy BinarySearch 99.67%
441. 排列硬币 Easy BinarySearch 100.00%
475. 供暖器 Easy BinarySearch 100.00%
69. x 的平方根 Easy BinarySearch 96.10%
378. 有序矩阵中第K小的元素 Medium BinarySearch 97.86%
875. 爱吃香蕉的珂珂 Medium BinarySearch 91.82%
436. 寻找右区间 Medium BinarySearch 100.00%
162. 寻找峰值 Medium BinarySearch 90.60%
658. 找到 K 个最接近的元素 Medium BinarySearch 96.82%
275. H指数 II Medium BinarySearch 97.30%
209. 长度最小的子数组 Medium BinarySearch SlidingWindow 97.96%
74. 搜索二维矩阵 Medium BinarySearch 94.89%
34. 在排序数组中查找元素的第一个和最后一个位置 Medium BinarySearch 94.28%
153. 寻找旋转排序数组中的最小值 Medium BinarySearch 99.04%
33. 搜索旋转排序数组 Medium BinarySearch 98.15%
81. 搜索旋转排序数组 II Medium BinarySearch 99.72%
287. 寻找重复数 Medium HashMap BinarySearch 86.83%
154. 寻找旋转排序数组中的最小值 II Hard BinarySearch 97.87%

Two Points (双指针)

题目 难度 解法 beats Runtime
977. 有序数组的平方 Easy TwoPoints 99.39%
344. 反转字符串 Easy TwoPoints 98.36%
349. 两个数组的交集 Easy HashMap 99.34%
283. 移动零 Easy TwoPoints 92.57%
27. 移除元素 Easy TwoPoints 97.20%
167. 两数之和 II - 输入有序数组 Easy TwoPoints 91.86%
345. 反转字符串中的元音字母 Easy TwoPoints 95.53%
844. 比较含退格的字符串 Easy TwoPoints Stack 94.66%
26. 删除排序数组中的重复项 Easy TwoPoints 96.77%
88. 合并两个有序数组 Easy TwoPoints 95.92%
350. 两个数组的交集 II Easy HashMap 97.54%
925. 长按键入 Easy TwoPoints 100.00%
141. 环形链表 Easy TwoPoints 97.17%
125. 验证回文串 Easy TwoPoints 96.73%
28. 实现strStr() Easy KMP 95.96%
234. 回文链表 Easy TwoPoints 96.51%
532. 数组中的K-diff数对 Easy HashMap 99.12%
763. 划分字母区间 Medium HashMap+TwoPoints+Greedy 96.67%
986. 区间列表的交集 Medium SlidingWindow 96.43%
11. 盛最多水的容器 Medium TwoPoints 99.27%
75. 颜色分类 Medium TwoPoints 97.04%
80. 删除排序数组中的重复项 II Medium TwoPoints 99.54%
524. 通过删除字母匹配到字典里最长单词 Medium TwoPoints 93.75%
1004. 最大连续1的个数 III Medium TwoPoints 95.83%
16. 最接近的三数之和 Medium TwoPoints 97.27%
142. 环形链表 II Medium TwoPoints 94.77%
15. 三数之和 Medium TwoPoints 95.96%
923. 三数之和的多种可能 Medium TwoPoints HashTable+Combination 96.30%
18. 四数之和 Medium TwoPoints 99.36%
845. 数组中的最长山脉 Medium SlidingWindow 100.00%
930. 和相同的二元子数组 Medium PrefixSum 100.00%
713. 乘积小于K的子数组 Medium SlidingWindow 100.00%
3. 无重复字符的最长子串 Medium SlidingWindow+HashTable 97.26%
904. 水果成篮 Medium SlidingWindow+HashTable 88.24%
567. 字符串的排列 Medium SlidingWindow+HashTable 87.75%
881. 救生艇 Medium TwoPoints 85.00%

Binary Tree(二叉树)

题目 难度 解法 beats Runtime
938. 二叉搜索树的范围和 Easy Recursion+BST 96.57%
617. 合并二叉树 Easy Recursion 97.63%
226. 翻转二叉树 Easy Recursion 98.02%
104. 二叉树的最大深度 Easy Recursion 90.87%
700. 二叉搜索树中的搜索 Easy Recursion+BST 90.57%
965. 单值二叉树 Easy Queue Recursion 94.69%
669. 修剪二叉搜索树 Easy Recursion 98.25%
107. 二叉树的层次遍历 II Easy Queue+Stack Recursion 98.25%
637. 二叉树的层平均值 Easy Recursion 98.61%
235. 二叉搜索树的最近公共祖先 Easy Recursion+BST 92.88%
872. 叶子相似的树 Easy Recursion 91.80%
257. 二叉树的所有路径 Easy Recursion 98.09%
897. 递增顺序查找树 Easy Recursion 94.34%
538. 把二叉搜索树转换为累加树 Easy Recursion+BST 84.93%
530. 二叉搜索树的最小绝对差 Easy Recursion+BST 85.71%
783. 二叉搜索树结点最小距离 Easy Recursion+BST 80.22%
100. 相同的树 Easy Recursion 75.53%
653. 两数之和 IV - 输入 BST Easy Recursion+BST+HashTable 100.00%
437. 路径总和 III Easy Recursion 74.51%
606. 根据二叉树创建字符串 Easy Recursion 74.47%
404. 左叶子之和 Easy Recursion 90.00%
110. 平衡二叉树 Easy Recursion 95.09%
563. 二叉树的坡度 Easy Recursion 73.33%
993. 二叉树的堂兄弟节点 Easy Recursion 87.88%
101. 对称二叉树 Easy Recursion 92.13%
112. 路径总和 Easy Recursion 84.76%
671. 二叉树中第二小的节点 Easy Recursion 95.16%
543. 二叉树的直径 Easy Recursion 93.98%
501. 二叉搜索树中的众数 Easy Recursion+HashTable 86.79%
572. 另一个树的子树 Easy Recursion 100.00%
111. 二叉树的最小深度 Easy Recursion 96.55%
1022. 从根到叶的二进制数之和 Easy Recursion 94.55%
687. 最长同值路径 Easy Recursion 85.25%
144. 二叉树的前序遍历 Medium Recursion 68.00%
102. 二叉树的层次遍历 Medium Queue+BFS Recursion+DFS 67.65%
94. 二叉树的中序遍历 Medium Recursion+DFS 64.76%
987. 二叉树的垂序遍历 Medium Recursion+HashTable 100.00%
1008. 先序遍历构造二叉树 Medium Recursion 90.91%
105. 从前序与中序遍历序列构造二叉树 Medium Recursion 58.31%
106. 从中序与后序遍历序列构造二叉树 Medium Recursion 94.87%
889. 根据前序和后序遍历构造二叉树 Medium Recursion 89.29%
654. 最大二叉树 Medium Recursion 85.71%
894. 所有可能的满二叉树 Medium HashTable+Recursion 100.00%
814. 二叉树剪枝 Medium Recursion 89.66%
450. 删除二叉搜索树中的节点 Medium Recursion 100.00%
513. 找树左下角的值 Medium Recursion 100.00%
701. 二叉搜索树中的插入操作 Medium Recursion 66.67%
230. 二叉搜索树中第K小的元素 Medium Recursion 90.91%
96. 不同的二叉搜索树 Medium Recursion 96.00%
1104. 二叉树寻路 Medium Iteration 50.00%
1123. 最深叶节点的最近公共祖先 Medium DFS 90.48%
998. 最大二叉树 II Medium Recursion 92.31%
1026. 节点与其祖先之间的最大差值 Medium Recursion 83.33%
116. 填充每个节点的下一个右侧节点指针 Medium Recursion 98.95%
117. 填充每个节点的下一个右侧节点指针 II Medium Recursion 88.00%
988. 从叶结点开始的最小字符串 Medium Recursion 100.00%
1145. 二叉树着色游戏 Medium Recursion 题解 97.14%
145. 二叉树的后序遍历 Hard Recursion+DFS Stack+DFS 84.00%

Recursion(递归)

题目 难度 解法 beats Runtime
779. 第K个语法符号 Medium Recursion 64.15%
794. 有效的井字游戏 Medium ----- 83.33%

Greedy Algorithm(贪心算法)

题目 难度 解法 beats Runtime
944. 删列造序 Easy HashTable Greedy 98.46%

String (字符串)

题目 难度 代码 beats Runtime
709. 转换成小写字母 Easy String 95.27%
771. 宝石与石头 Easy HashMap 96.19%
1108. IP 地址无效化 Easy HashMap 81.93%
392. Is Subsequence Medium String 96.43%
539. 最小时间差 Medium Sort+Skill 94.59%

Linked List(链表)

题目 难度 代码 beats Runtime
237. 删除链表中的节点 Easy -- 91.84%
206. 反转链表 Easy iteration 96.28%
234. 回文链表 Easy TwoPoints+Reverse 98.98%
876. 链表的中间结点 Easy TwoPoints 92.99%
1290. 二进制链表转整数 Easy Iteration 99.31%
141. 环形链表 Easy TowPoints 96.93%
83. 删除排序链表中的重复元素 Easy Ieration 61.04%
147. 对链表进行插入排序 Medium sort 75.68%
328. 奇偶链表 Medium TwoPoints 75.16%
817. 链表组件 Medium Linked-LIst 79.31%
86. 分隔链表 Medium Linked-LIst 85.16%
143. 重排链表 Medium TwoPoints+Merge+Reverse 97.62%
445. 两数相加 II Medium TwoPoints+Reverse 66.67%
725. 分隔链表 Medium TwoPoints+Reverse 98.18%
1019. 链表中的下一个更大节点 Medium -- 96.15%
92. 反转链表 II Medium -- 72.54%
82. 删除排序链表中的重复元素 II Medium Iteration 71.94%
1171. 从链表中删去总和值为零的连续节点 Medium HashMap 69.44%
19. 删除链表的倒数第N个节点 Medium TwoPoints 98.71%
61. 旋转链表 Medium Iteration 95.08%

Stack(栈)

题目 难度 代码 beats Runtime
496. 下一个更大元素 I Easy Stack+HashMap 95.47%
1021. 删除最外层的括号 Easy Iteration 97.18%
682. 棒球比赛 Easy Stack 94.84%
1047. 删除字符串中的所有相邻重复项 Easy Stack 73.21%
844. 比较含退格的字符串 Easy Stack 92.83%
20. 有效的括号 Easy Stack 99.24%
739. 每日温度 Medium Stack 100.00%

Heap(堆)

题目 难度 代码 beats Runtime
40. 最小的k个数 Easy Divide-and-Conquer+sort 100.00%
703. 数据流中的第K大元素 Easy Heap 69.53%
1046. 最后一块石头的重量 Easy Sort 98.88%
451. 根据字符出现频率排序 Medium HashTable+Sort 85.55%
215. 数组中的第K个最大元素 Medium Sort 61.86%
347. 前 K 个高频元素 Medium Sort 93.75%
692. 前K个高频单词 Medium HashMap+Sort 97.98%
973. 最接近原点的 K 个点 Medium Divide-and-Conquer 100.00%
1714.最小K个数 Medium Divide-and-Conquer+sort 100.00%

Dynamic Programming(动态规划)

题目 难度 代码 beats Runtime
263. 丑数 Easy Math 94.92%
49. 丑数 Medium DP 100.00%
264. 丑数 II Medium DP 94.37%
1201. 丑数 III Medium Binary-Search 94.12%
313. 超级丑数 Medium DP 94.00%
1709. 第 k 个数 Medium DP 100.00%

Array(数组)

题目 难度 代码 时间复杂度 分析
349. Intersection of Two Arrays Easy Set O(n) --
350. Intersection of Two Arrays II Easy Map O(n) --
977. Squares of a Sorted Array Easy 代码 -- --
905. Sort Array By Parity Easy 队列和栈 O(n) --
832. Flipping an Image Easy 队列 O(n) --
561. Array Partition I Easy 代码 O(n) --
999. Available Captures for Rook Easy 代码 O(n^2) --
1002. Find Common Characters Easy 集合 -- --
509. Fibonacci Number Easy 递推 O(n) --
985. Sum of Even Numbers After Queries Easy 偶数 O(n) --
867. Transpose Matrix Easy 双重循环 O(n^2) --
766. Toeplitz Matrix Easy 双重循环 O(n^2) --
566. Reshape the Matrix Easy 双重循环 O(n^2) --
888. Fair Candy Swap Easy hashmap O(n) --
485. Max Consecutive Ones Easy 动态规划 O(n) --
896. Monotonic Array Easy 记录状态 O(n) --
283. Move Zeroes Easy 数组 O(n) --
448. Find All Numbers Disappeared in an Array Easy 数组空位 O(n) --
169. Majority Element Easy hashmap O(n) --
229. Majority Element II Medium hashmap O(n) --
1051. Height Checker Easy sort O(nlogn) --
1013. Partition Array Into Three Parts With Equal Sum Easy Math O(n) --
217. Contains Duplicate Easy Set O(n) --
697. Degree of an Array Easy Map O(n) --
717. 1-bit and 2-bit Characters Easy -- O(n) --
661. Image Smoother Easy -- O(n^2) --
268. Missing Number Easy Math O(n) --
830. Positions of Large Groups Easy -- O(n) --
1018. Binary Prefix Divisible By 5 Easy Math O(n) --
118. Pascal's Triangle Easy -- O(n^2) --
628. Maximum Product of Three Numbers Easy 排序 O(nlogn) --
1010. Pairs of Songs With Total Durations Divisible by 60 Easy HashMap O(n) --
989. Add to Array-Form of Integer Easy Math O(n) --
119. Pascal's Triangle II Easy 杨辉三角 O(n^2) --
724. Find Pivot Index Easy -- O(n) --
849. Maximize Distance to Closest Person Easy -- O(n) --
747. Largest Number At Least Twice of Others Easy 极值 O(n) --
643. Maximum Average Subarray I Easy DP O(n) --
840. Magic Squares In Grid Easy -- O(n^2) --
219. Contains Duplicate II Easy HashMap O(n) --
605. Can Place Flowers Easy -- O(n) --
189. Rotate Array Easy 栈与队列 O(n) --
532. K-diff Pairs in an Array Easy Map与Set O(n) --
414. Third Maximum Number Easy Set O(n) --
665. Non-decreasing Array Easy -- O(n) --
950. Reveal Cards In Increasing Order Medium 队列与栈 O(n) --
969. Pancake Sorting Medium 排序 O(n^2) --
442. Find All Duplicates in an Array Medium Map O(n) --
695. Max Area of Island Medium BFS O(n^2) --
238. Product of Array Except Self Medium BFS O(n) --
78. Subsets Medium 全组合 O(n^2) --
90. Subsets II Medium 全组合无重复项 O(n^2) --
1011. Capacity To Ship Packages Within D Days Medium 二分查找 O(n^2) --
565. Array Nesting Medium Set O(n) --
835. Image Overlap Medium -- O(n^4) --
495. Teemo Attacking Medium -- O(n) --

Graph Theory(图论)

题目 难度 代码 时间复杂度 分析
207. 课程表 Medium TopologicalSorting O(n+m) --
210. 课程表 II Medium TopologicalSorting O(n+m) --

周赛打卡

题目 难度 代码 时间复杂度 空间复杂度
173 -- 1332. 删除回文子序列 Easy TwoPoints 84.21% --
173 -- 1333. 餐厅过滤器 Medium Sort 90.91% --
173 -- 1334. 阈值距离内邻居最少的城市 Medium Floyd-Warshall 60.67% --
173 -- 1335. 工作计划的最低难度 Hard DP 80.00% --
174 -- 1337. 方阵中战斗力最弱的 K 行 Easy Sort 93.75% --
174 -- 1338. 数组大小减半 Medium HashTable 92.68% --
174 -- 1339. 分裂二叉树的最大乘积 Medium Tree 57.14% --
174 -- 1340. 跳跃游戏 V Hard Recursion 93.33% --
177 -- 5169. 日期之间隔几天 Easy -- 100.00% --
177 -- 5170. 验证二叉树 Medium Tree 100.00% --
177 -- 5171. 最接近的因数 Medium Math 100.00% --
177 -- 5172. 形成三的最大倍数 Hard Math 100.00% --
178 -- 5344. 有多少小于当前数字的数字 Easy -- 100.00% --
178 -- 5345. 通过投票对团队排名 Medium Sort 100.00% --
178 -- 5346. 二叉树中的列表 Medium Tree+Recursion 100.00% --
178 -- 1368. 使网格图至少有一条有效路径的最小代价 Hard BFS 82.35% --
179 -- 1374. 生成每种字符都是奇数个的字符串 Easy -- 100% --
179 -- 1375. 灯泡开关 III Medium Math 100% --
179 -- 1376. 通知所有员工所需的时间 Medium DFS 71.62% --
179 -- 1377. T 秒后青蛙的位置 Hard DFS 87.88% --
180 -- 5356. 矩阵中的幸运数 Easy -- 100.00% --
180 -- 5357. 设计一个支持增量操作的栈 Medium Stack 100.00% --
180 -- 5179. 将二叉搜索树变平衡 Medium BST 100.00% --
180 -- 5359. 最大的团队表现值 Hard Heap 100.00% --
181 -- 5364. 按既定顺序创建目标数组 Easy Array 100.00% --
181 -- 1390. 四因数 Medium Math 100.00% --
181 -- 1391. 检查网格中是否存在有效路径 Medium BFS 100.00% --
181 -- 1392. 最长快乐前缀 Hard KMP 100.00% --
182 -- 5368. 找出数组中的幸运数 Easy -- 100.00% --
182 -- 5369. 统计作战单位数 Medium TwoPoints 100.00% --
182 -- 5370. 设计地铁系统 Medium HashMap 100.00% --
182 -- 5371. 找到所有好字符串 Hard 数位DP+KMP 100.00% --
183 -- 非递增顺序的最小子序列 Easy Sort O(nlogn) O(n)
183 -- 将二进制表示减到 1 的步骤数 Medium -- O(n^2) O(1)
183 -- 最长快乐字符串 Medium Sort+Greedy O(nlogn) O(1)
183 -- 石子游戏 III Hard DP O(n) O(n)
184 -- 数组中的字符串匹配 Easy String O(n^2) O(n)
184 -- 查询带键的排列 Medium Array O(n^2) O(n)
184 -- HTML 实体解析器 Medium String -- --
184 -- 给 N x 3 网格图涂色的方案数 Hard DP O(n) O(1)