• 剑指offer--37.和为S的两个数字


    链接:https://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b
    来源:牛客网@华科渣硕

    不要被题目误导了!证明如下,清晰明了:
    //输出两个数的乘积最小的。这句话的理解?
    假设:若b>a,且存在,
    a + b = s;
    (a - m ) + (b + m) = s
    :(a - m )(b + m)=ab - (b-a)m - m*m < ab;说明外层的乘积更小
    也就是说依然是左右夹逼法!!!只需要2个指针
    1.left开头right指向结尾
    2.如果和小于sum,说明太小了left右移寻找更的数
    3.如果和大于sum,说明太大了right左移寻找更的数
    4.和相等把left和right的数返回
    --------------------------------------------------------------------------------
    时间限制:1秒 空间限制:32768K 热度指数:184594

    题目描述

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

    输出描述:

    对应每个测试案例,输出两个数,小的先输出。
    class Solution {
        public:
            vector<int> FindNumbersWithSum(vector<int> array,int sum) {
                if(array.size()== 0)return array;
                auto start = array.begin();
                auto end = array.end()-1;
                vector<int> vec;
                while(start != end) {
                    if(*start+*end > sum) {
                        end--;
                    } else if(*start+*end < sum) {
                        start++;
                    } else {
                        vec.push_back(*start);
                        vec.push_back(*end);
                        break;
                    }
                }
                return vec;
            }
    };
  • 相关阅读:
    动画 + 设置contentoffset,然后就 蛋疼了,
    xmpp这一段蛋疼的 坑,
    项目,
    一段测试代码,哦哦哦,
    libresolv,
    mutating method sent to immutable object'
    解析json,是还是不是,
    济南学习 Day 4 T1 am
    济南学习 Day 3 T3 pm
    济南学习 Day 3 T2 pm
  • 原文地址:https://www.cnblogs.com/langyao/p/10625633.html
Copyright © 2020-2023  润新知