map的key与value问题

73 阅读1分钟

1. 两数之和

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map_nums;
        for (int i = 0; i < nums.size(); i++)
        {
            auto it = map_nums.find(target - nums[i]);
            if (it != map_nums.end())
                return { i,it->first };
            map_nums.insert(make_pair(i, nums[i]));
        }
        return {};
    }
};

map_nums.insert(make_pair(i, nums[i])); 这行代码里,把索引 i 作为键,数组的值 nums[i] 作为值插入了哈希表。这种做法不对,因为是要通过数组值找到其对应的索引,而不是反过来。

正确的做法是将数组的值 nums[i] 作为键,索引 i 作为值插入哈希表。这样,当查找目标值的补数时,可以直接通过值找到它对应的索引。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map_nums;
        for (int i = 0; i < nums.size(); i++)
        {
            auto it = map_nums.find(target - nums[i]);
            if (it != map_nums.end())
                return { i,it->second };
            map_nums.insert(make_pair(nums[i], i));
        }
        return {};
    }
};