剑指offer57 和为S的两个数字 焦灼中

还莫有轮到我,上帝保佑我 (0.0)

描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回两个数的乘积最小的,如果无法找出这样的数字,返回一个空数组即可。
返回值描述:
对应每个测试案例,输出两个数,小的先输出。
示例1
输入:
[1,2,4,7,11,15],15
返回值:
[4,11]

注意: 求乘积最小的,就是求最外层,和相同,最外层乘积最小,别被迷惑了,双指针夹逼

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<vector<int>> tempresult;
        vector<int> result;
        if (array.size() == 0) {
            return result;
        }
        int nright = array.size() - 1;
        int nleft = 0; 
        vector<int> minSub(sum / 2 , 1);
        while (nleft < nright) {
              if (array[nleft] + array[nright] == sum) {
                  result.push_back(array[nleft]);
                  result.push_back(array[nright]);
                  tempresult.push_back(result);
                  result.clear();
                  nleft++;
                  nright--;
              } 
              else if (array[nleft] + array[nright] > sum) {
                  nright--;
              }
              else {
                  nleft++;
              }
        }
        if(tempresult.empty()) {
            return result;
        }
        return tempresult[0];
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值