剑指Offer——JZ42.和为S的两个数字【二分】

题目传送门


剑指Offer——JZ42.和为S的两个数字【二分】_第1张图片


题解

  • 二分答案
  • 对于 a < b < c < d , a + d = = b + c aa<b<c<d,a+d==b+c 时,一定有 a ∗ d < b ∗ c a*dad<bc
  • 所以输出乘积最小的只是个幌子,第一次找到的二分答案就是最优解

AC-Code

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        int L = 0, R = array.size() - 1;
        while(L <= R) {
            if(array[L] + array[R] == sum)
                return {array[L], array[R]};
            else if(array[L] + array[R] < sum)
                ++L;
            else
                --R;
        }
        return {};
    }
};

你可能感兴趣的:(剑指Offer)