第7天了,依旧是很快写出充满BUG的代码,然后调试几小时,唉,好惨。
class Solution {
public int threeSumClosest(int[] nums, int target) {
// 边界判断
if (nums == null || nums.length < 3)
return 0;
// 排序
Arrays.sort(nums);
// 差值
int diff = Integer.MAX_VALUE;
// 初始化 refSum 值
int refSum = nums[0] + nums[1] + nums[nums.length - 1];
// 循环
for (int i = 0; i < nums.length - 2; i++) {
int k = i + 1, j = nums.length - 1;
while (k < j) {
int sum = nums[i] + nums[k] + nums[j];
// 如果有相等的,直接返回
if (sum == target)
return sum;
// 偏大,试图找比较小的
else if (sum > target)
j--;
// 偏小,试图找比较大的
else
k++;
// 找最小的diff
if (Math.abs(sum - target) < diff) {
diff = Math.abs(sum - target);
refSum = sum;
}
}
}
// 返回
return refSum;
}
}
参考了一下:
1. https://leetcode.com/problems/3sum-closest/discuss/7872/Java-solution-with-O(n2)-for-reference