1. 算法刷题方法论:如何高效攻克LeetCode Hot 100
作为一名经历过多次算法面试的开发者,我深知系统化刷题的重要性。LeetCode Hot 100是面试中最常出现的题目集合,掌握这些题目能显著提升面试通过率。下面我将分享第一天的10道题目解析,包含详细思路、代码实现和优化技巧。
1.1 准备工作与刷题策略
在开始刷题前,建议做好以下准备:
- 熟悉基础数据结构:数组、链表、哈希表、栈、队列等
- 掌握常用算法:双指针、滑动窗口、二分查找、DFS/BFS等
- 使用IDE或在线编程环境快速验证代码
- 建立错题本记录解题思路和易错点
我的刷题策略是:
- 先独立思考15-20分钟
- 写出初始解法并测试
- 分析时间/空间复杂度
- 查看最优解并比较差异
- 重写优化后的代码
- 总结题目类型和解题模式
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 哈希表应用专题
2.1 两数之和(#1)
这是最经典的哈希表应用题,要求找出数组中两数之和等于目标值的索引。
java复制class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> mp = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int x = nums[i];
if (mp.containsKey(target - x)) {
return new int[]{mp.get(target - x), i};
}
mp.put(x, i);
}
return new int[]{-1, -1};
}
}
关键点:
- 使用HashMap存储<数值, 索引>对
- 遍历时检查target - current是否存在于map中
- 时间复杂度O(n),空间复杂度O(n)
注意:不能先填充整个map再遍历,因为可能重复使用同一元素。例如target=6,nums=[3],会错误返回[0,0]。
2.2 字母异位词分组(#49)
将字母异位词(由相同字母重新排列组成的单词)分组。
java复制class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> mp = new HashMap<>();
for (String s : strs) {
char[] sc = s.toCharArray();
Arrays.sort(sc);
mp.computeIfAbsent(new String(sc), _ -> new ArrayList<>()).a
