描述:给定一个无序数组以及一个给定值,从该数组中找到三个元素值,使得三元素和最接近给定值。
输入:Array={-1,2,-4,1},sum=1。
输出:{-1,1,2}。
思路:参考《相加为定值和的元组》,计算当前三元组的和与定值的步长,若步长缩小则更新结果。时间复杂度为平方级,空间复杂度为1。
class Solution{
public:
int *threeSumClosest(int A[],int n,int target)
{
int res[3];
int min_gap=1000;//根据数组元素范围调整步长参考值;
sort(A,A+n);
for(int i=0;i<n-2;i++)
{
int j=i+1;
int k=n-1;
if(i>0&&A[i]==A[i-1])continue;
while(j<k)
{
int sum=A[i]+A[j]+A[k];
int gap=abs(sum-target);
if(gap<min_gap)
{
min_gap=gap;
res[0]=A[i];
res[1]=A[j];
res[2]=A[k];
}
if(sum<target)
{
j++;
}
else
{
k--;
}
}
}
return res;
}
};