原题链接在这里:https://leetcode.com/problems/3sum-closest/
与3Sum类似,但是不能去掉重复的值,因为这里不需要避免存入重复的值。基本思路就是维护一个最小的diff,排序之后夹逼。Time Complexity is O(n*logn+n^2) = O(n^2). Space Complexity is O(1).
Note: 1. 注意sum 和 target 不同关系时l,r的变化,这里不小心就搞混了。
2. 这一返回值是 sum 而不是diff,这里下次要注意。
AC Java:
public class Solution {
public int threeSumClosest(int[] nums, int target) {
if(nums == null || nums.length<3)
return Integer.MIN_VALUE;
Arrays.sort(nums);
int diff = Math.abs(nums[0]+nums[1]+nums[2]-target);
int res = nums[0]+nums[1]+nums[2];
for(int i = 0; i < nums.length-2; i++){
int l = i+1;
int r = nums.length-1;
while(l<r){
int sum = nums[i]+nums[l]+nums[r];
int newDiff = Math.abs(sum - target);
if(newDiff < diff){
diff = newDiff;
res = sum;
}
if(sum < target){ //error
l++;
}else if(sum > target){
r--;
}else{
return target;
}
}
}
return res;
}
}