剑指Offer值和为S的两个数字

版权声明:所有的博客都是博主的个人笔记。。。。。 https://blog.csdn.net/qq_35976351/article/details/83373854

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

思路

l表示左侧位置,r表示右侧位置。不断向中间靠拢,如果array[l]+array[r] == sum,则找到正确结果,如果l>=r说明无解。

AC代码

注意边界条件

class Solution {
  public:
    vector<int> FindNumbersWithSum(vector<int> array, int sum) {
        vector<int>res;
        int l = 0, r = array.size() - 1;
        while(l < r) {
            if(array[l] + array[r] == sum) { // 正确结果
                res.push_back(array[l]);
                res.push_back(array[r]);
                return res;
            } else if(array[l] + array[r] > sum) { // 结果偏大,右侧缩小
                --r;
            } else {  // 结果偏小,左侧增加
                ++l;
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/83373854