LeetCode系列(总)

数组

27.移除元素 ✅
26.删除排序数组中的重复项 ✅
283.移动零 ✅
844.比较含退格的字符串 ✅
977.有序数组的平方 ✅
209.长度最小的子数组 ✅
904.水果成篮 ✅
76. 最小覆盖子串 ✅

哈希表或数组存字符频率,优化的方案存差值

59.螺旋矩阵II ✅

按方向或层模拟,定义好变量

54.螺旋矩阵 ✅
剑指Offer 29.顺时针打印矩阵 ✅

二分查找

35. 搜索插入位置
69. x 的平方根
367. 有效的完全平方数
34. 在排序数组中查找元素的第一个和最后一个位置
81. 搜索旋转排序数组 II

细节较多,需要考虑包含重复元素的情况

153. 寻找旋转排序数组中的最小值
154. 寻找旋转排序数组中的最小值 II
540. 有序数组中的单一元素

考虑奇偶位数的情况

4. 寻找两个正序数组的中位数

把问题转换为求第k (k > 1) 小的元素再求解,使用二分查找来逐步排除不可能的元素

链表

203.移除链表元素 ✅
707.设计链表 ✅
206.反转链表 ✅
92.反转链表 II ✅
24.两两交换链表中的节点 ✅
19.删除链表的倒数第N个节点 ✅
面试题 02.07. 链表相交 ✅
142.环形链表II ✅
25.K 个一组翻转链表 ✅
23.合并K个升序链表 ✅
86.分隔链表 ✅

哈希表

242.有效的字母异位词 ✅
349.两个数组的交集 ✅
202.快乐数 ✅
1.两数之和 ✅
454.四数相加II ✅
383.赎金信 ✅
8.三数之和 ✅

去重是关键

18.四数之和 ✅

字符串

344.反转字符串 ✅
541. 反转字符串II ✅
剑指Offer 05.替换空格 ✅
151.翻转字符串里的单词
剑指Offer58-II.左旋转字符串 ✅

局部反转 + 整体反转

28.实现 strStr()
459.重复的子字符串

双指针

27.移除元素 ✅
344.反转字符串 ✅
剑指Offer 05.替换空格 ✅
151.翻转字符串里的单词
206.反转链表 ✅
19.删除链表的倒数第N个节点 ✅
面试题 02.07. 链表相交 ✅
142.环形链表II ✅
8.三数之和 ✅
15.三数之和 ✅

去重是关键

18.四数之和 ✅

167.两数之和 II - 输入有序数组 ✅
88. 合并两个有序数组 ✅
76. 最小覆盖子串 ✅

滑动窗口问题编程不熟练

633.平方数之和 ✅
680.验证回文字符串 Ⅱ✅
524.通过删除字母匹配到字典里最长单词 ✅

双指针分别指到两个字符串的初始位置

340.至多包含 K 个不同字符的最长子串 ❌

栈和队列

232.用栈实现队列 ✅
225.用队列实现栈 ✅
20.有效的括号 ✅
1047.删除字符串中的所有相邻重复项 ✅
150.逆波兰表达式求值 ✅
239.滑动窗口最大值 ✅

优先队列/单调队列

347.前 K 个高频元素 ✅

注意优先队列的用法

二叉树

满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树(AVL)

144.二叉树的前序遍历 ✅
145.二叉树的后序遍历 ✅
94.二叉树的中序遍历 ✅
102.二叉树的层序遍历 ✅
226.翻转二叉树 ✅
101.对称二叉树 ✅

左右子树分别是左右中和右左中的遍历顺序

104.二叉树的最大深度 ✅
111.二叉树的最小深度 ✅
222.完全二叉树的节点个数 ❌
110.平衡二叉树 ✅
257.二叉树的所有路径 ✅
100.相同的树 ✅
404.左叶子之和 ✅
513.找树左下角的值 ✅
112.路径总和 ✅
105.从前序与中序遍历序列构造二叉树 ✅
106.从中序与后序遍历序列构造二叉树 ✅
654.最大二叉树 ✅
103.二叉树的锯齿形层序遍历 ✅

贪心

455.分发饼干 ✅
135.分发糖果 ✅
435.无重叠区间 ✅
605.种花问题 ✅
452.用最少数量的箭引爆气球 ✅
763.划分字母区间 ✅

在处理数组前,统计一遍信息(如频率、个数、第一次出现位置、最后一次出现位置等)可以使题目难度大幅降低

122.买卖股票的最佳时机 II ✅
406.根据身高重建队列 ✅

思路不太好想, 构造一个n个位置的空队列,先按照身高排序,利用高个看不到矮个的特点,依次插入到空队列中

665. 非递减数列

不能有超过一个的递减区间,并且考虑一种特殊情况,比如:3 4 1 2,虽然只有一个递减区间,但是不管是4变为1,还是1变为4,都不满足要求。所以遇到递减区间时,可以将1变为4,然后继续遍历,发现存在4 2另一个递减区间,不满足要求。

排序

快速排序

void quick_sort(vector<int>& nums, int l, int r) {
	if (l + 1 >= r) return;
	int first = l, last = r - 1, key = nums[first];
	while (first < last) {
		while (first < last && nums[last] >= key) --last;
		nums[first] = nums[last];
		while (first < last && nums[first] <= key) {
			++first;
		}
		nums[last] = nums[first];
	}
	nums[first] = key;
	quick_sort(nums, l, first);
	quick_sort(nums, first + 1, r);
}

215. 数组中的第K个最大元素

快速选择、堆排序

347. 前 K 个高频元素

桶排序、堆排序、快速排序

451. 根据字符出现频率排序
75. 颜色分类
31.下一个排列 ✅

搜索/回溯

695. 岛屿的最大面积
547. Friend Circles
417. 太平洋大西洋水流问题

46. 全排列
77. 组合
79. 单词搜索
51. N 皇后

934. 最短的桥
126. 单词接龙 II

130. 被围绕的区域
257. 二叉树的所有路径
47. 全排列 II
37. 解数独
310. 最小高度树

需要证明最小高度的树根节点在最长路径的重点
树形DP

动态规划

509.斐波那契数 ✅
70.爬楼梯 ✅
746.使用最小花费爬楼梯 ✅
62.不同路径 ✅
63.不同路径 II ✅
198. 打家劫舍
413. 等差数列划分
64. 最小路径和
542. 01 矩阵
221. 最大正方形

279. 完全平方数

dp[i] = 1 + min(dp[i-1], dp[i-4], dp[i-9])

91. 解码方法

139.单词拆分 ✅
300.最长递增子序列 ✅
674.最长连续递增序列 ✅
718.最长重复子数组 ✅
1143.最长公共子序列 ✅
1035.不相交的线

二分查找更快

1143.最长公共子序列 ✅
416.分割等和子集 ✅
474.一和零 ✅
322.零钱兑换 ✅
72.编辑距离 ✅
650.只有两个键的键盘 ✅

有点抽象

10.正则表达式匹配 ❌

509.斐波那契数 ✅

121.买卖股票的最佳时机 ✅

暴力/贪心/动态规划

122.买卖股票的最佳时机II ✅

单调栈

739.每日温度 ✅
496.下一个更大元素 I ✅
503.下一个更大元素 II ✅
42.接雨水 ✅
84.柱形图中最大的矩形 ❌

单调栈/双指针

LeetCode热题100

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值