和为s的数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,
使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
1.自己用迭代器两个指针做的
1.left开头,right指向结尾
2.如果和小于sum,说明太小了,left右移寻找更大的数
3.如果和大于sum,说明太大了,right左移寻找更小的数
4.和相等,把left和right的数返回
vector<int> FindNumbersWithSum(vector<int> & array,int sum) { vector<int> res; if(array.empty()) return res; vector<int>:: iterator start=array.begin(); vector<int>:: iterator end=array.end()-1; while (start<end) { if((*start)+(*end)==sum) { res.push_back(*start); res.push_back(*end); return res; } else if((*start)+(*end)<sum) { start++; } else if((*start)+(*end)>sum) { end--; } } return res; }
2牛客上 容器下标做
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int> result; int length = array.size(); int start = 0; int end = length - 1; while (start < end) { if (array[start] + array[end] == sum) { result.push_back(array[start]); result.push_back(array[end]); break; } else if (array[start] + array[end] < sum) start++; else end--; } return result; } };