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

和为S的两个数字

作者: su945 | 来源:发表于2020-05-21 21:35 被阅读0次

    题目描述

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

    问题分析

    结合和为S的连续正数序列思路,选用两个索引,一个从头开始,另一个从尾部开始。
    如果两个数字和为S且乘积最小,那么这两个数的差是最大的,才能保证是乘积最小。
    所以按从头部和尾部分别搜索,第一次出现和为S的数字即为乘积最小的数字。

    解题思路1

    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum)
    {
        vector<int> result ;
        if(array.size() < 2)
        {
            return result ;
        }
        int start = 0;
        int end = array.size()-1;
        while(start < end)
        {
            int array_num = array[start]+array[end];
            if(array_num < sum)
            {
                start += 1;
            } 
            else if (array_num == sum)
            {
                result.push_back(array[start]);
                result.push_back(array[end]);
                break ;
            } else
            {
                end -=1 ;
            }
    
        }
        return result ;
        }
    };
    

    相关文章

      网友评论

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

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