题目:Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
思想:采用3SUM的方法,设置两个指针,一个指向nums[1],一个指向nums[n],然后两者不断逼近。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if(nums.size()<3)return 0;
sort(nums.begin(),nums.end());
int sum;
int result=nums[0]+nums[1]+nums[nums.size()-1];//求出第一个和
for(int i=0;i<nums.size()-2;++i)
{
int j=i+1;
int n=nums.size()-1;
while(j<n)
{
sum=nums[i]+nums[j]+nums[n];
if(abs(sum-target)<abs(result-target))
result=sum;
else
{
if(sum>target)
{
n--;
}
else if(sum==target)
return target;
else
{
j++;
}
}
}
}
return result;
}
};
int main()
{
Solution s;
int arr[]={0,2,1,-3};
vector<int> ivec(arr,arr+4);
int ret=s.threeSumClosest(ivec,1);
cout<<ret<<endl;
system("pause");
return 0;
}