剑指offer 和为S的两个数字
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
注意:目前变量满足条件时,要记得将index值进行增减操作。进行所有操作后,最后得到的可能不满足要求,所以最后返回的时候要对结果进行判断看是否满足要求。
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { if(array.size() == 0){ return {}; } int begin = 0,end = array.size() - 1; int tmp = 0; int resSmall = 0,resBig = 0; int Min = INT_MAX; while(begin < end){ tmp = array[begin] + array[end]; if(tmp == sum){ int mul = array[begin] * array[end]; if(mul < Min){ Min = mul; resSmall = array[begin]; resBig = array[end]; } ++begin; } if(tmp > sum){ --end; } if(tmp < sum){ ++begin; } } vector<int> result; if(resSmall + resBig == sum){ result.push_back(resSmall); result.push_back(resBig); } return result; } };