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

    题目描述
    输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
    输出描述:
    对应每个测试案例,输出两个数,小的先输出。

    思路:

    使用两个变量small和big分别表示数组的下标,small = 0,big = end,然后开始循环,如果两者对应的数组之和等于sum,那么比较一下乘积是否是目前位置最小的,是最小的就放入result数组中,然后移动small(一定要记得移动,不然死循环),如果大于sum,就--big,小于的话就++small。要使用一个是否找到这样的两个数的标志位flag,不然之前result初始化是两个0,没找到就会返回两个0,所以要进行判断,没找到就返回空数组。

    这题还有个编程技巧就是将求和的变量定义在循环里面,这里在每次改动small和big后,不需要再次将tmp和减一个数再加上一个数。

    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            if(array.size() < 2){
                return {};
            }
            vector<int> result(2);
            bool flag = false;
            int small = 0,big = array.size() - 1;
            int mul = INT_MAX;
            while(small < big){
                int tmp = array[small] + array[big];  
                if(tmp == sum){
                    if(mul > array[small] * array[big]){
                        flag = true;
                        mul = array[small] * array[big];
                        result[0] = array[small];
                        result[1] = array[big];                    
                    }   
                    ++small;
                }
                else if(tmp > sum){
                    --big;
                }
                else{
                    ++small;
                }
            }
            if(!flag){
                return {};
            }
            return result;
        }
    };
  • 相关阅读:
    软件工程--团队作业2
    软件工程——团队作业1
    软件工程第二次作业——四则运算结对编程3.0版本(最终版本)
    软件工程第一次作业补充
    软件工程第一次作业
    实验一
    Qt-关于QTreeView的一些设置
    Qt-QTreeView绘制单元格
    NX二次开发-获取集成环境下打开的part名
    NX二次开发-NX是否处于集成环境下
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8202738.html
Copyright © 2011-2022 走看看