LeetCode 167 两数之和 II

LeetCode 167 两数之和 II

🟡 中等

https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/

首先, 可以使用暴力的方法, 遍历开始和结束, 复杂度 n*n; 这样没有使用到递增这个条件. 首先left在最左边, right在最右边, 如果和大于target, 这说明右边的值太大了, 它和最小的值(left) 之和都大于target, 因此放弃最右边的, right减一; 如果小于target, 说明左边的太小了, 因此要left加一; 如此下去直到找到等于的。

class Solution {

public:

    vector<int> twoSum(vector<int>& numbers, int target) {

        int left = 0;

        int right = numbers.size()-1;

        while(left<right){

            int sum = numbers[left]+numbers[right];

            if(sum==target){

                return {left+1,right+1};

            }

            if(sum>target) right--;

            if(sum<target) left++;

        }

        return {};

  

    }

};