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

题目

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1  index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

思路

为了找到相加可以得到目标值的两个数,我们可以设定两个指针,一个指向头一个指向尾,然后为了方便确定两数之和的大小和调整指针位置,设定左指针不能大于右指针,符合条件就开始遍历,因为数组里的所有数都是排好顺序从左向右递增的,如果两数之和大于目标值,就可以使右指针左移(左指针不能左移,因为从一开始就指向最左端),反之使左指针右移,如果等于目标值就可以把左右两个指针所在的索引分别+1输出,因为numbers数组里的数下标还是从0开始的,题中说从1开始,所以两个指针索引值都加一,最后放入结果数组输出。

代码

class Solution {
public:
    vector twoSum(vector& numbers, int target) {
        int left=0,right=numbers.size()-1;//左指针和右指针
        vector p;//结果数组
        while(lefttarget)//两数之和大于目标值
            {
                right--;//右指针左移
            }
            else if(numbers[left]+numbers[right]

你可能感兴趣的:(算法,leetcode)