https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/
vector<int> twoSum(vector<int>& numbers, int target) {
for(int i=0,j=numbers.size()-1;i<j;i++){
while(i<j && numbers[i]+numbers[j]>target) j--;
if(i<j && numbers[i]+numbers[j]==target) return {i+1,j+1};
}
return {};
}
思路:定义双指针,i在数组的开头,j在数组的末尾。
如果两个指针指向元素的和 sum == target,那么得到要求的结果;
如果 sum > target,移动较大的元素,使 sum 变小一些;
如果 sum < target,移动较小的元素,使 sum 变大一些。
数组中的元素最多遍历一次,时间复杂度为 O(N)。只使用了两个额外变量,空间复杂度为 O(1)。
原文:https://www.cnblogs.com/OfflineBoy/p/14408881.html