1. 两数之和

https://leetcode-cn.com/problems/two-sum/description/
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

Example:
Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0,1].

主要思路:

  1. 使用hashmap存储每个数组元素相应下标
  2. 遍历数组,查找target - current_value是否已存在在hashmap中。存在则返回当前元素和在hashmap查到的元素相应下标,否则将添加到hashmap。

代码实现:

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

你可能感兴趣的:(1. 两数之和)