LeetCode 167 Two Sum II - Input array is sorted(左右指针)
程序员文章站
2022-06-04 16:17:44
...
题目链接:点击这里
一个最直观的想法是,使用二重循环枚举序列中的整数,判断它们的和是否为 ,如果是,输出方案;如果不是,则继续枚举。
显然,这种做法的时间复杂度为O(n2),对 在 的规模时是不可承受的。
【two pointers】
初始化:令下标 的初值为 ,下标 的初值为 ,即令 、 分别指向第一个元素和最后一个元素。
two pointers 思想充分利用了序列递增的性质,变量 只有递增操作、变量 只有递减操作, 和 的操作次数最多为 次,时间复杂度为 。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int i = 0, j = numbers.size()-1;
while(i<j)
{
int sum = numbers[i]+numbers[j];
if(sum==target)
return {i+1,j+1}; //have exactly one solution
else if(sum<target)
i++;
else
j--;
}
return {-1,-1};
}
};
推荐阅读
-
【LeetCode】Two Sum & Two Sum II - Input array is sorted & Two Sum IV - Input is a BST
-
167. Two Sum II - Input array is sorted [medium] (Python)
-
LeetCode 167 Two Sum II - Input array is sorted(左右指针)
-
【LeetCode】Two Sum & Two Sum II - Input array is sorted & Two Sum IV - Input is a BST
-
167. Two Sum II - Input array is sorted [medium] (Python)