LeetCode 167. 两数之和 II - 输入有序数组

题目描述

LeetCode 167. 两数之和 II - 输入有序数组

 

示例

LeetCode 167. 两数之和 II - 输入有序数组

 

 思路分析

用双重for循环会超时,可以考虑使用双指针:i从0开始,j从numbers.size()-1开始,用一个while循环。

每次求出 numbers[i] + numbers[j] 的值,与target进行比较。如果相等则输出,较小则移动左指针(因为是非递减序列),较大则移动右指针。

直到左指针等于右指针为止。

代码

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int> a;
        int i = 0,j = numbers.size()-1;//双指针法
        while(i<j){ //左指针等于右指针时,停止
            int sum = numbers[i]+numbers[j];
            if(sum==target){
                a.push_back(i+1);
                a.push_back(j+1);
                return a;
            }else if(sum<target){ //较小,移动左指针
                i++;
            }else{  //较大,移动右指针
                j--;
            }
        }
        return a;
    }
};

 

上一篇:寻找两数之和等于特定数(Java)


下一篇:剑指 Offer 11. 旋转数组的最小数字