这个是two sum 的变种,可以用hash_map, 是O(n)的空间复杂度,O(n)的时间复杂度。
但是考虑到ordered的性质,可以用双指针,空间复杂度可以下降到O(1).
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int i = 0;
int j = numbers.size()-1;
while(i < j){
if(numbers[i] + numbers[j] == target) return {i+1, j+1};
if(numbers[i] + numbers[j] < target) i++;
if(numbers[i] + numbers[j] > target) j--;
}
return {0,0};
}
};