2023-07-10 16. 最接近的三数之和,后续更新优化

57 阅读1分钟

leetcode.cn/problems/3s…

先把数组排序,然后再暴力的求结果。暴力循环的过程中,如果出现这个情况,可以提前break,进入下一轮循环。

当计算的和与 target 的差越来越大的时候,就不用再进行后续的计算了。换一个数,重新再来

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int nearestSum = -1;
        int nearestdif = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; ++i) {
            for (int j = i + 1; j < nums.length; ++j) {
                int base = nums[i] + nums[j];
                int dif = Integer.MAX_VALUE;
                for (int k = j + 1; k < nums.length; ++k) {
                    int sum = base + nums[k];
                    int curDif = Math.abs(target - sum);
                    if (curDif <= dif) {
                        if (curDif < nearestdif) {
                            nearestSum = sum;
                            nearestdif = curDif;
                        }
                        dif = curDif;
                    } else {
                        break;
                    }
                }
            }
        }
        return nearestSum;
    }
}