美文网首页
Leetcode数组easy | 167. 两数之和 II -

Leetcode数组easy | 167. 两数之和 II -

作者: Ivan_Lan | 来源:发表于2018-11-29 22:39 被阅读17次

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。

    函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

    说明:

    返回的下标值(index1 和 index2)不是从零开始的。
    你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

    示例:
    输入: numbers = [2, 7, 11, 15], target = 9
    输出: [1,2]
    解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
    

    解答:

    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)  // 两数和小于目标值,左指针向右移动
                    left++;
                else if(sum>target)  //  两数和大于目标值,右指针向左移动
                    right--;
                else
                    return {left+1,right+1};  //  直到两数之和等于目标值,返回下标值,不是从0开始所以需要加1
            }
            return {0,0};  // 目标值为0
        }
    };
    

    相关文章

      网友评论

          本文标题:Leetcode数组easy | 167. 两数之和 II -

          本文链接:https://www.haomeiwen.com/subject/sjvqcqtx.html