1.题意
给定数组,寻找数组中和为给定值的两个元素。数组是无序的,每个元素只能使用一次,有且仅有一组答案。
2.用到的算法
哈希表。查找效率为O(1)。
3.代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> summap;
for(int i = 0;i < nums.size();i++){
summap[nums[i]] = i;
}
for(int i = 0;i < nums.size();i++){
unordered_map<int, int>::iterator iter;
iter = summap.find(target-nums[i]);
if(iter != summap.end() && iter->second != i)
return {i, iter->second};
}
return {-1, -1};
}
};
4.复杂度
时间复杂度为O(n),也就是最开始遍历放进去的那一遍。
空间复杂度O(n),nums有多少元素就需要多大空间。