我的方法:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> ans;
unordered_map<int, int> map;
//unordered_map<int, int> map; first is the key=> the value, the second is the index i+1.
for(int i = 0; i < numbers.size(); i++){
if(map.count(numbers[i]) <= 1){//do not use same element twice
int diff = target - numbers[i];
if(map.count(diff) > 0){
ans.push_back(map[diff]);
ans.push_back(i + 1);
return ans;
}
else{
map[numbers[i]] = i + 1;
}
}
}
return {-1, -1};
}
};
Neetcode:
https://www.youtube.com/watch?v=cQ1Oz4ckceM
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> ans;
int begin = 0, end = numbers.size() - 1;
while(begin < end){
if(numbers[begin] + numbers[end] == target){
ans = {begin + 1, end + 1};
return ans;
}
else if(numbers[begin] + numbers[end] < target){
begin ++;
}
else{
end --;
}
}
return {-1, -1};
}
};
因为是sorted 通过引入双指针 space complexity O(1) 不额外获得空间。TC: O(N)