一、题目
二、思路
1、思路一,O(n^2)
2、哈希,O(n)
三、代码一
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int>res;
if(array.empty())
{
return res;
}
int right=array.size()-1;
int Count=INT_MAX;
int first=0;
int second=0;
int pos=0;
for(int i=0;i<array.size();++i)
{
while(i<right)
{
if((array[i]+array[right])>sum)
{
right--;
}
else if((array[i]+array[right])==sum)
{
pos=1;
if(Count>array[i]*array[right])
{
Count=array[i]*array[right];
first=i;
second=right;
}
break;
}
else
{
break;
}
}
right=array.size()-1;
}
if(pos==0)
{
return res;
}
if(array[first]>array[second])
{
swap(array[first],array[second]);
}
res.emplace_back(array[first]);
res.emplace_back(array[second]);
return res;
}
};
四、代码二(哈希)
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
if (array.empty()) return vector<int>();
int tmp = INT_MAX;
pair<int, int> ret;
unordered_map<int,int> mp;
for (int i=0; i<array.size(); ++i) {
mp[array[i]] = i;
}
for (int i=0; i<array.size(); ++i) {
if (mp.find(sum-array[i]) != mp.end()) {
int j = mp[sum-array[i]];
if ( j > i && array[i]*array[j] < tmp) {
tmp = array[i] * array[j];
ret = {i, j};
}
}
}
if (ret.first == ret.second) return vector<int>();
return vector<int>({array[ret.first], array[ret.second]});
}
};