您的位置:首页 > 其它

LeetCode:3Sum Closest

2014-05-23 11:13 232 查看
GivenanarraySofnintegers,findthreeintegersinSsuchthatthesumisclosesttoagivennumber,target.Returnthesumofthethreeintegers.Youmayassumethateachinputwouldhaveexactlyonesolution.
Forexample,givenarrayS={-121-4},andtarget=1.

Thesumthatisclosesttothetargetis2.(-1+2+1=2).
这道题和3Sum问题类似。首先肯定要排序,设置一个min记录与target的最接近的sum值。



publicclassSolution{
publicintthreeSumClosest(int[]num,inttarget)
{
if(num.length<3)returntarget;
quickSort(num,0,num.length-1);
intmin=num[0]+num[1]+num[2];
for(inti=0;i<num.length-2;i++)
{
intstart=i+1;
intend=num.length-1;
while(start<end)
{
if(num[i]+num[start]+num[end]==target)
{
min=target;
returnmin;
}
elseif(num[i]+num[start]+num[end]>target)
{
if(Math.abs(num[i]+num[start]+num[end]-target)<Math.abs(min-target))
{
min=num[i]+num[start]+num[end];
}
end--;
}
elseif(num[i]+num[start]+num[end]<target)
{
if(Math.abs(num[i]+num[start]+num[end]-target)<Math.abs(min-target))
{
min=num[i]+num[start]+num[end];
}
start++;
}
}
}
returnmin;
}
publicvoidquickSort(int[]num,intbegin,intfinish)
{
if(begin<finish)
{
intp=partition(num,begin,finish);
quickSort(num,begin,p-1);
quickSort(num,p+1,finish);
}

}
publicintpartition(int[]num,intbegin,intfinish)
{
intvalue=num[begin];
if(finish-begin==0)returnbegin;
while(begin<finish)
{
while(begin<finish&&num[finish]>value)
{
finish--;
}
num[begin]=num[finish];
while(begin<finish&&num[begin]<=value)
{
begin++;
}
num[finish]=num[begin];
}
num[begin]=value;
returnbegin;
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
章节导航