欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

领扣:最接近的三数之和

程序员文章站 2022-05-20 13:52:32
...

笔记

题目:给定一个包括 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.****.net/xc121566/article/details/81331628
赏心悦目,共勉

相关标签: 领扣