题意大概就给定一个数组,和一个整数,问那三个数的加和与给定的数最接近,感觉还没有上一题难,暴力破解.......
解法和上一题差不多,增加几个变量计算一下差值,遇到更小的就存一下.
#include "iostream"
#include "vector"
#include "algorithm"
#include "string"
using namespace std;
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int len = nums.size();
int right,left;
sort(nums.begin(),nums.end());
int min = 99999999;
int result;
int temp;
if(len < 3)
return result;
for(int i = 0 ; i < nums.size()-2; i++)
//cout<<"("<<nums[i]<<")\n";
{
right = i+1;
left = nums.size()-1;
for(;right<left;)
{
temp = abs((nums[i]+nums[right]+nums[left])-target);
if(temp<min)
{
min = temp;
result = nums[i]+nums[right]+nums[left];
if(min == 0)
break;
}
if(nums[i]+nums[right]+nums[left] > target)
{
left--;
}
else
{
right++;
}
}
}
return result;
}
};
int main()
{
Solution test;
vector<int> num;
num.push_back(1);
num.push_back(1);
num.push_back(1);
num.push_back(0);
num.push_back(1);
int result;
int dig = 100;
result = test.threeSumClosest(num,dig);
cout<<result<<endl;
return 0;
}