欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode 167 Two Sum II - Input array is sorted(左右指针)

程序员文章站 2022-06-04 16:17:44
...

题目链接:点击这里
LeetCode 167 Two Sum II - Input array is sorted(左右指针)
一个最直观的想法是,使用二重循环枚举序列中的整数,判断它们的和是否为 targettarget,如果是,输出方案;如果不是,则继续枚举。

显然,这种做法的时间复杂度为O(n2),对 nn10510^5 的规模时是不可承受的。

【two pointers】

初始化:令下标 ii 的初值为 00,下标 jj 的初值为 n1n-1,即令 iijj 分别指向第一个元素和最后一个元素。

two pointers 思想充分利用了序列递增的性质,变量 ii 只有递增操作、变量 jj 只有递减操作,iijj 的操作次数最多为 nn 次,时间复杂度为 O(n)O(n)

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};
    }
};
相关标签: 尺取法