LeetCode:3Sum Closest
2014-05-23 11:13
232 查看
GivenanarraySofnintegers,findthreeintegersinSsuchthatthesumisclosesttoagivennumber,target.Returnthesumofthethreeintegers.Youmayassumethateachinputwouldhaveexactlyonesolution.
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;
}
}
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;
}
}
相关文章推荐
- 【leetcode】3Sum Closest
- [Leetcode] 3Sum Closest
- leetcode刷题系列C++-3Sum Closest
- LeetCode 16 3Sum Closest
- 算法分析与设计——LeetCode:16. 3Sum Closest
- LeetCode 16. 3Sum Closest
- 【Leetcode】之3Sum Closest
- LEETCODE: 3Sum Closest
- leetcode 16 3Sum Closest
- leetcode16. 3Sum Closest
- leetcode 3Sum Closest
- LeetCode 16 3Sum Closest
- LeetCode16——3Sum Closest
- LeetCode题解——3Sum Closest
- LeetCode -- 3Sum Closest
- [LeetCode2]3Sum Closest
- Leetcode 16. 3Sum Closest
- LeetCode_3Sum Closest
- [LeetCode] 16. 3Sum Closest
- leetcode:2sum,2sumSorted,3sum,3sumClosest,4sum,4sumII.[哈希表,双指针]