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

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

    【思路】这里我们还是使用双指针的思想,一个指向开头,另一个指向末尾,那为什么和连续正数序列不同呢?这是由于题目要输出两个数乘积最小的那组,有一个定理是:当两个数的总和相同时,两个数相差越多,那么它的乘积就越小!反之相差越小,乘积越大,因此从两头遍历得到的第一组数一定是乘积最小的!

    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            int begin = 0, end = array.size()-1;
            vector<int> res;
            while(begin < end){
                if(array[begin] + array[end] == sum){
                    res.push_back(array[begin]);
                    res.push_back(array[end]);
                    break;
                }
                while(begin < end && array[begin] + array[end] > sum) --end;
                while(begin < end && array[begin] + array[end] < sum) ++begin;
            }
            return res;
        }
    };
  • 相关阅读:
    状态模式
    适配器模式
    观察者模式
    浮点数在内存中的存储方式
    建造者模式
    外观模式
    模版方法模式
    原型模式
    Python 学习笔记6 变量-元组
    Python 学习笔记5 变量-列表
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11394692.html
Copyright © 2011-2022 走看看