leetcode 0016
说明
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
题目描述
结果
思路
先排个序。
指针i遍历从1到len-2。
j遍历i的左边,k遍历i的右边,双重循环。
三数之和大于target,则k向左移;
三数之和小于target,则j向右移;
index数组用于记录当前最优的三个指针。
扫描二维码关注公众号,回复:
10533060 查看本文章
mincount用于记录当前最小差距。
代码
class Solution {
public int threeSumClosest(int[] nums, int target) {
int len = nums.length;
if(len == 0 || len == 1 || len == 2) {
return 0;
}
if(len == 3) {
return nums[0]+nums[1]+nums[2];
}
Arrays.sort(nums);
int minCount = Math.abs(nums[0]+nums[1]+nums[len-1]-target);
int[] index = {0,1,len-1};
for(int i=1;i<len-1;i++) {
int j = 0,k = len-1;
while(j<i&&k>i) {
int temp = nums[i]+nums[j]+nums[k]-target;
if(Math.abs(temp)<minCount) {
index[0] = j;
index[1] = i;
index[2] = k;
minCount = Math.abs(temp);
}
if(temp == 0) {
return target;
}else if(temp>0){
k--;
}else {
j++;
}
}
}
return nums[index[0]]+nums[index[1]]+nums[index[2]];
}
}