和为S的两个数字

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

#include <iostream>
#include<vector>
#include<stack>
#include <algorithm>
#include <unordered_map>

using namespace std;

vector<int> FindNumbersWithSum(vector<int> array, int sum) {
    vector<int> res;
    int left = 0;
    int right = (int)array.size() - 1;

    while (left < right) {
        int s = array[left] + array[right];
        if(s < sum) left++;
        else if(s > sum) right--;
        else{
            res.push_back(array[left]);
            res.push_back(array[right]);
            return res;
        }
    }
    return res;
}

int main() {
    vector<int> arr = {-2,-1, 1, 2, 2, 3, 4, 5, 6, 7, 8};
    vector<int> res = FindNumbersWithSum(arr,0);
    for(auto i:res){
        cout<<i<<" "<<endl;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容