和为S的两个数字

这一生的挚爱 提交于 2020-02-06 21:06:34

和为S的两个数字

1.题目描述

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

2.思路

设置两个下标left,right分别指向数组头和尾,计算curSum = array[left] + array[right],如果curSum > sum,则right–,否则left++,直到curSum == sum。

3.代码

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> res;
        if(array.empty()){
            return res;
        }
        int left = 0;
        int right = array.size() - 1;
        while(left < right){
            int curSum = array[left] + array[right];
            if(curSum == sum){
                res.push_back(array[left]);
                res.push_back(array[right]);
                break;
            }
            else if(curSum > sum){
                right--;
            }
            else{
                left++;
            }
        }
        return res;
    }
};

4.复杂度分析

时间复杂度:O(n)
空间复杂度:O(1)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!