HOT100速成

发布时间:2026/8/23 19:06:22
HOT100速成 1.字母异位词分组49. 字母异位词分组 - 力扣LeetCode字母异位词排序后得到的字符串完全相同利用这个特性作为分组的唯一标识。使用HashMapString, ListStringKey 存排序后的字符串Value 存原始字符串列表。class Solution { public ListListString groupAnagrams(String[] strs) { MapString, ListString map new HashMapString, ListString(); for (String str : strs) { char[] array str.toCharArray(); Arrays.sort(array); String key new String(array); ListString list map.getOrDefault(key, new ArrayListString()); list.add(str); map.put(key, list); } return new ArrayListListString(map.values()); } }2.15. 三数之和 - 力扣LeetCode1.排序2.从头开始左右双指针3.大于0剪枝去重4.去重ans.add(Arrays.asList(nums[i], nums[j], nums[k]));3.11. 盛最多水的容器 - 力扣LeetCode左右指针移动小的4.3. 无重复字符的最长子串 - 力扣LeetCode每次把当前加入数组如果字符存在就把滑动窗口移动到下一个位置5.560. 和为 K 的子数组 - 力扣LeetCode前缀和哈希表找k-sum的值一开始加入0,16.53. 最大子数组和 - 力扣LeetCode自立门户委屈加进去动态规划7.56. 合并区间 - 力扣LeetCode按区间起点排序这样重叠的区间一定会相邻遍历每个区间判断它和当前最后一个区间是否重叠重叠就合并更新右端点不重叠就添加新区间8.238. 除了自身以外数组的乘积 - 力扣LeetCode前缀积后缀积开额外数组存9.73. 矩阵置零 - 力扣LeetCode先遍历一次开两个数组记录0的位置再遍历数组置零10.54. 螺旋矩阵 - 力扣LeetCode设置top,bot,left,right逐步收缩11.48. 旋转图像 - 力扣LeetCode设置辅助数组即可12.240. 搜索二维矩阵 II - 力扣LeetCode暴力即可13.200. 岛屿数量 - 力扣LeetCodedfs 遇到边界遇到水退出递归搜索上下左右把他改0主函数遇到1就dfsclass Solution { void dfs(char[][] grid,int r,int c) { int nrgrid.length; int ncgrid[0].length; if(r0|| c0 || rnr || cnc || grid[r][c]0) { return; } grid[r][c]0; dfs(grid,r-1,c); dfs(grid,r1,c); dfs(grid,r,c-1); dfs(grid,r,c1); } public int numIslands(char[][] grid) { if(gridnull||grid.length0) { return 0; } int nrgrid.length; int ncgrid[0].length; int num_islands0; for(int r0;rnr;r) { for(int c0;cnc;c) { if(grid[r][c]1) { num_islands; dfs(grid,r,c); } } } return num_islands; } }14.198. 打家劫舍 - 力扣LeetCode动态规划二维数组打过和没打15.739. 每日温度 - 力扣LeetCode维护一个栈中温度单调递减从栈底到栈顶递减的索引栈当遇到更高温度时弹出所有比它小的温度并计算结果。栈和队列的基本操作StackInteger stack new Stack(); stack.push(1); // 入栈添加元素到栈顶 stack.push(2); stack.push(3); // 栈[1, 2, 3] int top stack.pop(); // 出栈移除并返回栈顶元素 → 3 int peek stack.peek(); // 查看栈顶不移除元素 → 2 int size stack.size(); // 栈的大小 → 2 boolean empty stack.isEmpty(); // 是否为空 → false QueueInteger queue new LinkedList(); queue.offer(1); // 入队添加元素到队尾 queue.offer(2); queue.offer(3); // 队列[1, 2, 3] int head queue.poll(); // 出队移除并返回队头元素 → 1 int peek queue.peek(); // 查看队头不移除元素 → 2 int size queue.size(); // 队列的大小 → 2 boolean empty queue.isEmpty(); // 是否为空 → false16.215. 数组中的第K个最大元素 - 力扣LeetCodePriorityQueueInteger qnew PriorityQueue((a,b)-b-a);大根堆17.347. 前 K 个高频元素 - 力扣LeetCode全文背诵class Solution { public int[] topKFrequent(int[] nums, int k) { HashMapInteger,Integer mapnew HashMap(); for(int i0;inums.length;i) { map.put(nums[i],map.getOrDefault(nums[i],0)1); } PriorityQueueint[] pqnew PriorityQueue((a,b)-(b[1]-a[1])); int[] resnew int[k]; for(var en:map.entrySet() ) { pq.offer(new int[]{en.getKey(),en.getValue()}); } for(int i0;ik;i) { res[i]pq.poll()[0]; } return res; } }hashmap基本操作var en:map.entrySet()getKey(),getValue();HashMapString, Integer map new HashMap(); // 1. put - 添加/更新键值对 map.put(apple, 5); // {apple: 5} map.put(banana, 3); // {apple: 5, banana: 3} map.put(apple, 10); // 更新 apple 的值 → {apple: 10, banana: 3} // 2. get - 获取值不存在返回 null Integer value map.get(apple); // 10 Integer value2 map.get(orange); // null // 3. getOrDefault - 获取值不存在返回默认值 Integer val map.getOrDefault(orange, 0); // 0 // 4. remove - 删除键值对 map.remove(banana); // {apple: 10} // 5. containsKey - 判断键是否存在 boolean hasApple map.containsKey(apple); // true boolean hasOrange map.containsKey(orange); // false // 6. containsValue - 判断值是否存在 boolean hasValue10 map.containsValue(10); // true // 7. size - 获取键值对数量 int size map.size(); // 1 // 8. isEmpty - 判断是否为空 boolean empty map.isEmpty(); // false // 9. clear - 清空所有键值对 map.clear(); // {} // 10. putIfAbsent - 仅当键不存在时插入 map.putIfAbsent(apple, 5); // apple 不存在插入 {apple: 5} map.putIfAbsent(apple, 10); // apple 已存在不更新仍然是 5 //11.遍历全部 for (Map.EntryString, Integer entry : map.entrySet()) { String key entry.getKey(); Integer value entry.getValue(); System.out.println(key : value);18.55. 跳跃游戏 - 力扣LeetCode贪心即可19.45. 跳跃游戏 II - 力扣LeetCode正向遍历记录最大值在到达最大值的时候必须跳