前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

1、最接近的三数之和

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

示例:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

1.1、解题思路

和我三数之和的解题思想差不多

1.2、算法

public int threeSumClosest(int[] nums, int target) {

    //从小到达排列
    Arrays.sort(nums);
    int res = 0;
    int differ = Integer.MAX_VALUE;

    for (int k = 0; k < nums.length - 2; k++) {

        int i = k +1 ;
        int j = nums.length-1;
        while (i < j ){
            int sum = nums[k] + nums[i] + nums[j];

            //确定差值,和三数之和不同的地方
            int tempDiffer = Math.abs(sum-target);
            if (tempDiffer < differ){
                res = sum;
                differ = tempDiffer ;
            }


            if (sum == target){
                return target;
            }else if (sum > target){
                j--;
            }else {
                i++;
            }
        }

    }
    return res;
}

1.3、测试

 @Test
    public void test(){
        int[] nums = {1,1,-1,-1,3} ;
        int target = 3 ;
        System.out.println(threeSumClosest(nums, target));
    }

ContactAuthor