问题描述:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
解题思路:
最容易想到的就是两层遍历循环(最容易想到的,也是最差的)时间复杂度O(n*n),如何O(n)复杂度解决呢?这就要利用到map查找是线性时间的特性。
代码如下:
#include <unordered_map>
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
vector<int> result;
for(int i=0; i<nums.size(); i++){
//遍历数组,找到另一半的值
int other = target - nums[i];
//利用map特性查找,如果在map,则说明找到了
if(map.find(other) != map.end()){
//把找到的数组下标添加到result中
result.push_back(map[other]);
result.push_back(i);
}else {
//没找到,那就把key-value添加到map中。其中key对应nums[i],value是下标
map[nums[i]] = i;
}
}
return result;
}
};