1. 两数之和

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

传送门: https://leetcode-cn.com/problems/two-sum/submissions/

【笔记】将第一个数字存于unordered_map<int, int>中,其中<key=数值, value=位置>。遍历时,当两个数之和为target则命中。

  1. 对于vector<int>可以直接使用{}初始化, 相当于 vector<int> vec = {...}

  2. Google C++编程规范中,要求function/for/if...{/(/)前后都必须有空格, 如果只有if没有else,可以将if写为一行。

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> m;

for (int v2 = 0; v2 < nums.size(); ++v2) {
int v1 = target - nums[v2];
if (m.find(v1) != m.end()) return { m[v1], v2 };
m[nums[v2]] = v2; //<key = 第一个数值, value = 对应位置>
}
return {};
}
};