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).思路:从中挑选出任意三个,比较这三个值和目标相距最经的和是什么
void helper(vector<int>& vec,int index,int num,vector<int>& path,int target,int& difference,int& result)
{
if(index >= vec.size())
return ;
path.push_back(vec[index]);
num--;
if(num ==0)
{
int i=0;
int sum=0;
sum =accumulate(path.begin(),path.end(),sum);
if(difference > abs(target-sum))
{
difference = abs(target-sum);
result = sum;
}
}
helper(vec,index+1,num,path,target,difference,result);
path.pop_back();
num++;
helper(vec,index+1,num,path,target,difference,result);
}
int threeSumClosest(vector<int>& vec,int target)
{
if(vec.size()==0)
return 0;
vector<int> path;
int result;
int difference = numeric_limits<int>::max();
helper(vec,0,3,path,target,difference,result);
return result;
}
ps:其实这个题目的思路和组合的思路一样,只不过这里选择出来之后还需要和目标元素进行比较。