题目描述

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

输出描述:

对应每个测试案例,输出两个数,小的先输出。

 

解题思路:

遍历数组,二分找另一个数字。跟《和为S的连续正数序列》基本类似。

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int>res;
        int n = array.size();
        int a, b;
        int vmin = 0xfffffff;
        for(int i = 0; i < n; i++){
            int l = i+1;
            int r = n-1;
            int mid = (l+r)/2;
            while(l <= r){
                mid = (l+r)/2;
                if(array[mid] < sum-array[i]){
                    l = mid+1;
                }else if(array[mid] > sum-array[i]){
                    r = mid -1;
                }else{
                    if(array[i]*array[mid] < vmin){
                        a = array[i];
                        b = array[mid];
                        vmin = array[i]*array[mid];
                    }
                    break;
                }
            }
        }
        if(vmin == 0xfffffff) return res;
        res.push_back(a);
        res.push_back(b);
        return res;
    }
};

  

 

相关文章:

  • 2022-02-06
  • 2022-12-23
  • 2022-12-23
  • 2021-07-04
  • 2021-10-11
  • 2022-12-23
  • 2022-02-15
  • 2021-12-06
猜你喜欢
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-10
  • 2022-12-23
  • 2021-12-12
相关资源
相似解决方案