[LeetCode Hot100] 两数之和🔥三步秒杀,小白也能看懂的暴力→哈希表优化!
本文对应题目链接:两数之和
📌题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:nums[0] + nums[1] = 2 + 7 = 9
🧠 解题思路(图文分解)
暴力法(青铜段位)
双层循环遍历所有组合,时间复杂度 O(n²):
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
❌ 缺点:数据量大时直接超时!
哈希表法(王者段位)✨
关键思路:用空间换时间
- 创建哈希表记录遍历过的数值及其索引。
- 每次计算差值
diff = target - num。 - 若差值存在于哈希表,直接返回对应索引。
动态过程图解:
当前值:2 → 哈希表空 → 存入{2:0}
当前值:7 → 差值=9-7=2 → 2在哈希表中 → 返回[0,1]
🚀代码实现
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int[] twoSum(int[] nums, int target) {
// 创建哈希表,存储数值和索引的映射
Map<Integer, Integer> hashmap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int diff = target - nums[i];
// 检查差值是否在哈希表中
if (hashmap.containsKey(diff)) {
return new int[]{hashmap.get(diff), i};
}
// 将当前值和索引存入哈希表
hashmap.put(nums[i], i);
}
// 如果没有找到,返回空数组
return new int[0];
}
}
💡 复杂度分析
- 时间复杂度:O(n) → 只需一次遍历。
- 空间复杂度:O(n) → 哈希表存储 n 个元素。
🌟 总结要点
✅ 哈希表思想:快速查找的利器。
✅ 边遍历边存储:避免重复计算。
✅ 适用场景:频繁查找问题时优先考虑。
讨论环节
💬 你在面试中遇到过这题吗?还知道哪些变种解法?欢迎评论区交流!
2万+



被折叠的 条评论
为什么被折叠?



