🧩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[] 会插默认值,查表用 findcount
  • 返回的下标顺序不重要(题目允许任意顺序)
Related · 哈希