算法的实战(八):LeetCode -- threeSum Closest

一 题目描述

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

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

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

二 解题思路

 这道题其实跟threeSum的另一个变体,与此不同是不用去重,且如果没有等于target的值,找最接近的一个值,所以我们需要维持一个最小值min的变量

三 代码实战

 public static int threeSumClosest(int[] nums, int target) {
        if(nums.length<3){
            return 0;
        }
        Arrays.sort(nums);
        int subVar = Integer.MAX_VALUE;
        int min = 0;
        for(int i =0;i<nums.length-1;i++){
            int lowIndex = i+1;
            int hinghIndex = nums.length-1;
            while (lowIndex<hinghIndex){
                int threeSum = nums[i]+nums[lowIndex]+nums[hinghIndex];
                if(Math.abs(target-threeSum)<subVar){
                    subVar = Math.abs(target-threeSum);
                    min=threeSum;
                }
                if(threeSum==target){
                    return min;
                }else if(threeSum>target){
                    hinghIndex--;
                }else {
                    lowIndex++;
                }
            }
        }
        return min;
    }

猜你喜欢

转载自blog.csdn.net/m0_38082440/article/details/82944182