题目描述
题解
常规方法使用两层循环暴力求解,时间复杂度在O(n^2)。这里主要讲时间复杂度为O(n)的方法,用到了哈希表,只需要遍历一次数组。在遍历数组时,计算当前元素的补数complement = target - nums[i],然后检查哈希表中是否已经存在这个数,若存在,则返回索引序列,否则将当前元素和它的索引存入哈希表,接着遍历。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashMap;
for(int i = 0; i < nums.size(); i++){
int complement = target - nums[i];
if(hashMap.find(complement) != hashMap.end()){
return {hashMap[complement], i};
}
hashMap[nums[i]] = i;
}
return {};
}
};