leetcode:3Sum Closest
2014-03-05 22:21
363 查看
跟3sum一样,记录绝对查值最小的值就行,
定位i,j=i+1,k=n-1, tmp为三个数之和
如果比target大,k--
如果比target小,j++
public class Solution {
public int threeSumClosest(int[] num, int target) {
int i,j,k;
int tmp,close;
int n=num.length;
Arrays.sort(num);
close=num[0]+num[1]+num[2];
for(i=0;i<n-2;i++)
{
j=i+1;k=n-1;
if(Math.abs(num[i]+num[j]+num[k]-target)<Math.abs(target-close))
close=num[i]+num[j]+num[k];
//System.out.println(close+" "+i+" "+j+" "+k);
while(j<k)
{
tmp=num[i]+num[j]+num[k];
if(Math.abs(tmp-target)<Math.abs(close-target))
close=tmp;
//System.out.println(close+" "+num[i]+" "+num[j]+" "+num[k]);
if(tmp==target)
return target;
else if(tmp>target)
k--;
else
j++;
}
}
return close;
}
}
定位i,j=i+1,k=n-1, tmp为三个数之和
如果比target大,k--
如果比target小,j++
public class Solution {
public int threeSumClosest(int[] num, int target) {
int i,j,k;
int tmp,close;
int n=num.length;
Arrays.sort(num);
close=num[0]+num[1]+num[2];
for(i=0;i<n-2;i++)
{
j=i+1;k=n-1;
if(Math.abs(num[i]+num[j]+num[k]-target)<Math.abs(target-close))
close=num[i]+num[j]+num[k];
//System.out.println(close+" "+i+" "+j+" "+k);
while(j<k)
{
tmp=num[i]+num[j]+num[k];
if(Math.abs(tmp-target)<Math.abs(close-target))
close=tmp;
//System.out.println(close+" "+num[i]+" "+num[j]+" "+num[k]);
if(tmp==target)
return target;
else if(tmp>target)
k--;
else
j++;
}
}
return close;
}
}
相关文章推荐
- Palindrome Number
- Max Points on a Line
- Evaluate Reverse Polish Notation
- Sort List
- Insertion Sort List
- LRU Cache
- Binary Tree Postorder Traversal
- Binary Tree Preorder Traversal
- Reorder List
- Linked List Cycle
- Linked List Cycle II
- Word Break
- Word Break II
- Copy List with Random Pointer
- Single Number
- Single Number II
- Candy
- Gas Station
- Clone Graph
- Palindrome Partitioning