领扣:最接近的三数之和

笔记

题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        //数组排序
        Arrays.sort(nums);
        int closest = Integer.MAX_VALUE, sub  = 0, subabs = 0, sum = 0;
        //每次固定i,在i的两侧设置left和right,根据与target的差值大小调整左移右移
        for (int i = 1; i < nums.length - 1; i++) {
            int left = 0, right = nums.length - 1;
            while (left < i && i < right) {
                sub = nums[left] + nums[i] + nums[right] - target;
                subabs = Math.abs(sub);
                //closest记录和与target的差,sum记录closest对应下的元素和
                if (closest > subabs) {
                    closest = subabs;
                    sum = nums[left] + nums[i] + nums[right];
                }
                //三数和大于target,right左移,和减小
                if (sub > 0) right--;
                //三数和小于target,left右移,和增大
                else if (sub < 0) left++;
                else {
                    sum = target;
                    break;
                }
            }
        }
        return sum;
    }
}

原贴:https://blog.csdn.net/xc121566/article/details/81331628
赏心悦目,共勉

猜你喜欢

转载自blog.csdn.net/weixin_42750480/article/details/84849979