zoukankan      html  css  js  c++  java
  • 和为S的两个数字★★

    题目描述

    输入一个递增排序的数组和一个数字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;
        }
    };
    

      

  • 相关阅读:
    《大道至简》读后感
    第一周学习总结-Java
    c++与java的几个不同点
    单调队列 滑动窗口模型
    计算空间
    关于dp初始化问题
    康托展开小结-
    Vm-Ubuntu下配置Qt开发环境
    C++学习013多态
    C++学习012友元
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10684734.html
Copyright © 2011-2022 走看看