🧩Algo 哈希
1. 两数之和
难度:🟢 Easy | 标签:哈希、数组 | 状态:⬜ LeetCode 链接
思路
一次遍历,用哈希表存 值 → 下标。
对当前元素 x,查 target - x 是否已在表里,是则返回两个下标。
为什么是 先查再插:避免 [3, 3], target=6 时同一个位置自己匹配自己。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> seen; // value -> index
for (int i = 0; i < (int)nums.size(); ++i) {
auto it = seen.find(target - nums[i]);
if (it != seen.end()) return {it->second, i};
seen[nums[i]] = i;
}
return {};
}
};
复杂度
- 时间 O(n),空间 O(n)
- 暴力是 O(n²),哈希用空间换时间
易错 / 回顾
- 不要用双重 for
- 顺序:先查,后插
unordered_map::operator[]会插默认值,查表用find或count- 返回的下标顺序不重要(题目允许任意顺序)
Related · 哈希