美文网首页
和为S的两个数字

和为S的两个数字

作者: 李伟13 | 来源:发表于2020-04-24 13:33 被阅读0次

题目描述

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

输出描述

对应每个测试案例,输出两个数,小的先输出。

第一想法

  • 从中间开始,双指针。取第一组和为S的数
  • 从头开始,双指针,取phigh - plow最小组的数

思路

(刚开始因为乘积最小陷入平方根的泥沼中.其实只需要取中间的数双指针做就可以了)

AC代码

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        int len = array.size();
        int plow = len / 2, phigh = plow + 1;
        int low,high;
        vector<int> vec;
        
        while(plow >= 0 && phigh < array.size())
        {
            if(array[plow] + array[phigh] > sum)
                plow--;
            else if(array[plow] + array[phigh] < sum)
                phigh++;
            else{
                low = array[plow];
                high = array[phigh];
                phigh++;
            }
        }
        if(low + high != sum)
            return vec;
        vec.push_back(low);
        vec.push_back(high);
        return vec;
    }
};

看了讨论区

发现我的是从乘积最大的就开始找,明明直接两端开始找就可以了

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        int len = array.size();
        int plow = 0, phigh = len - 1;
        vector<int> vec;
        while(plow < phigh)
        {
            if(array[plow] + array[phigh] == sum){
                vec.push_back(array[plow]);
                vec.push_back(array[phigh]);
                return vec;
            }
            while(array[plow] + array[phigh] < sum && plow < phigh) plow++;
            while(array[plow] + array[phigh] > sum && plow < phigh) phigh--;
        }
        return vec;
    }
};

相关文章

  • 和为S的两个数字

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

  • 和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,...

  • 和为S的两个数字

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

  • 和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,...

  • 和为S的两个数字

    题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输...

  • 和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,...

  • 和为S的两个数字

    时间限制:1秒 空间限制:32768K 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们...

  • 和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,...

  • 和为s的两个数字

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

  • 和为s的两个数字

    题目链接 :https://leetcode.cn/problems/he-wei-sde-liang-ge-sh...

网友评论

      本文标题:和为S的两个数字

      本文链接:https://www.haomeiwen.com/subject/zfzxwhtx.html