LeetCode第十六题-数组中三数之和最接近目标值的答案

3Sum Closest
问题简介:
给定n个整数的数组nums和整数目标,在nums中找到三个整数,使得总和最接近目标,返回三个整数的总和,可以假设每个输入都只有一个解决方案

举例:
给定数组:nums=[-1, 2, 1, -4], 目标值:target = 1.
最接近目标值的答案是2 (-1 + 2 + 1 = 2).

解法一:
与上一道题类似,这次要求的是三数之和与目标值的差值最小值,可以定义一个变量来记录这个差值
思路就是想先定义一个最接近的值默认取前三个数的合,然后将数组排序后

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        int closest = nums[0] + nums[1] + nums[2];
        int diff = Math.abs(closest - target);
        Arrays.sort(nums);
        int length =nums.length;
        for (int i = 0; i < length - 2; ++i) {
            int left = i + 1, right = length - 1;
            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];
                int newDiff = Math.abs(sum - target);
                if (diff > newDiff) {
                    diff = newDiff;
                    closest = sum;
                }
                if (sum < target) ++left;
                else --right;
            }
        }
        return closest;
    }
}

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

你可能感兴趣的:(leetcode)