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

// test20.cpp : 定义控制台应用程序的入口点。
//

include "stdafx.h"

include

include

include

include

include

include

include<string.h>

include

using namespace std;

class Solution {
public:
vector FindNumbersWithSum(vector array, int sum) {
if (array.empty()) return{};
auto small = array.begin(); //指向小的指针
auto big = array.end()-1; //指向大的指针
auto curr = big;
vector<vector> vec;
vector result;

while (small<big)
{
while (small < curr)
{
if (small + curr == sum) //找到第一组就能确定是乘积最小,所以不用做后续的比较
{
result.push_back(
small);
result.push_back(
curr);
vec.push_back(result);
result.clear();
}
else if (*small + *curr < sum)
{
break;
}
else
{

}
--curr;
}
small++;
curr = big;
}
if (vec.empty()) return{};
auto it = vec.begin();//这里面是多余的
int num1= (it->begin());
int num2= (it->begin() + 1);
int mult = num1
num2;
++it;
while (it!=vec.end())
{
if (mult >= (
(it->begin()))((it->begin() + 1)))
{
num1 = *(it->begin());
num2 = *(it->begin() + 1);
}
++it;
}
result.clear();
result.push_back(num1);
result.push_back(num2);

return result;
}
};
int main()
{

Solution so;
vector v = { 1,2,3,4,5,6,7,8,9 };
vector vec = so.FindNumbersWithSum(v,9);
for (auto it = vec.begin();it != vec.end();++it)
{
cout << *it << " ";
}

cout << endl;
return 0;
}

posted @ 2016-11-03 20:32  wdan2016  阅读(1149)  评论(0)    收藏  举报