力扣 1. 两数之和

28 阅读1分钟

🔗 leetcode.cn/problems/tw…

题目

  • 给定数组 nums,给定目标值 target,返回满足 nums[i] + nums[j] = target 的 i,j 值, i ≠ j
  • 保证仅包含一个答案

思路

  • 用 hash_map 记录 nums[i] 对应的下标 i,遍历 nums[i], 用 hash_map 查找是否有元素 target-nums[i]

代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        unordered_map<int, int> nums_map;
        for (int i = 0; i < nums.size(); i++) {
            nums_map[nums[i]] = i;
        }
        for (int i = 0; i < nums.size(); i++) {
            if (nums_map.find(target-nums[i]) != nums_map.end() && (nums_map[target - nums[i]] != i)) {
                ans.push_back(i);
                ans.push_back(nums_map[target-nums[i]]);
                return ans;
            }
        }
        return ans;
        
    }
};