Leetcode hot 100
1 哈希
1. 两数之和
1 | class Solution { |
49. 字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
思路:
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
1 | class Solution { |
128. 最长连续序列
给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
1 | class Solution { |
2 双指针
283. 移动零
1 | class Solution { |
11. 盛最多水的容器
1 | class Solution { |
15. 三数之和
- 排序:首先将数组排序,这样可以方便地使用双指针来进行查找。
- 遍历数组:对于每个元素
nums[i],我们将其视为三元组中的第一个数,然后通过双指针来查找剩下的两个数。 - 双指针查找:对于当前固定的
nums[i],我们设定两个指针,left指向i+1,right指向数组的末尾。我们检查nums[i] + nums[left] + nums[right]:- 如果和为零,记录这个三元组,并同时移动
left和right。 - 如果和小于零,说明需要让和变大,所以移动
left。 - 如果和大于零,说明需要让和变小,所以移动
right。
- 如果和为零,记录这个三元组,并同时移动
- 跳过重复元素:为了避免重复结果,在移动指针时需要跳过相同的数字。
1 | public class Solution { |
3 滑动窗口
3. 无重复字符的最长子串
1 | class Solution { |
438. 找到字符串中所有字母异位词
要解决这个问题,我们可以使用滑动窗口算法。具体地说,滑动窗口可以帮助我们逐渐遍历字符串 s,同时维护一个窗口,该窗口的大小等于字符串 p 的长度,并检查该窗口内的子串是否为 p 的异位词。
- 计数器:首先,创建一个字符计数器来存储字符串
p中每个字符的频率。 - 滑动窗口:接着,我们使用一个滑动窗口来遍历字符串
s。窗口的大小与字符串p的长度相同。 - 匹配:每次窗口滑动时,检查窗口内的子串是否跟
p的字符频率匹配。如果匹配,则记录当前窗口的起始索引。 - 更新窗口:每次滑动时,我们通过添加一个新的字符进入窗口,并移除窗口左边的字符,从而保持窗口的大小不变。
1 | public class Solution { |
4 子串
560. 和为 K 的子数组
- 前缀和:前缀和是指数组从起始位置到当前位置的所有元素的和。假设
sum(i)表示数组从下标0到i位置元素的和,那么我们可以通过计算两个前缀和的差来得到某个子数组的和。 - 公式:如果我们知道
sum(j) - sum(i) == k,那么数组nums[i+1...j]的和为k。因此,问题可以转化为寻找之前的某个前缀和sum(i),使得sum(j) - sum(i) == k。 - 哈希表:我们使用哈希表来记录每个前缀和出现的次数。对于每个新的前缀和
sum(j),我们查看是否存在sum(i)使得sum(j) - sum(i) = k,如果存在,则说明找到了一个子数组。
1 | import java.util.HashMap; |
5 普通数组
53. 最大子数组和
1 | class Solution { |
56. 合并区间 Todo
1 | class Solution { |
189. 轮转数组
1 | class Solution { |
238. 除自身以外数组的乘积
1 | class Solution { |
6 矩阵
73. 矩阵置零
1 | class Solution { |
54. 螺旋矩阵
1 | public List<Integer> spiralOrder(int[][] matrix) { |
48. 旋转图像
1 | class Solution { |
240. 搜索二维矩阵 II
1 | class Solution { |
7. 链表
160. 相交链表
1 | public class Solution { |
206. 反转链表
1 | class Solution { |
234. 回文链表
1 | class Solution { |
1 | class Solution { |
141. 环形链表
1 | public class Solution { |
142. 环形链表 II
1 | public class Solution { |
21. 合并两个有序链表
1 | class Solution { |
2. 两数相加
1 | class Solution { |
19. 删除链表的倒数第 N 个结点
1 | class Solution { |
24. 两两交换链表中的节点
1 | class Solution { |
148. 排序链表
1 | class Solution { |
二叉树
94. 二叉树的中序遍历
1 | class Solution { |
104. 二叉树的最大深度
1 | class Solution { |
226. 翻转二叉树
1 | class Solution { |
101. 对称二叉树
1 | class Solution { |
543. 二叉树的直径
1 | class Solution { |
102. 二叉树的层序遍历
1 | public List<List<Integer>> levelOrder(TreeNode root) { |
108. 将有序数组转换为二叉搜索树
1 | class Solution { |
98. 验证二叉搜索树
1 | class Solution { |
230. 二叉搜索树中第 K 小的元素
1 | class Solution { |
199. 二叉树的右视图
1 | class Solution { |
114. 二叉树展开为链表
1 | public static void preOrderStack(TreeNode root) { |
105. 从前序与中序遍历序列构造二叉树
1 | class Solution { |
437. 路径总和 III
1 | class Solution { |
236. 二叉树的最近公共祖先
1 | class Solution { |
- 标题: Leetcode hot 100
- 作者: moye
- 创建于 : 2024-10-14 11:28:11
- 更新于 : 2025-12-11 14:39:48
- 链接: https://www.kanes.top/2024/10/14/Leetcode hot 100/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论