16. 最接近的三数之和

2020-12-04  本文已影响0人  土豆泥加冰谢谢

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

示例:

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

提示:

3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4

        public int threeSumClosest(int[] nums, int target) {
            int ret=0;
            //依旧先排序,便于计算目标范围
            Arrays.sort(nums);
            //第一重循环,确定第一位数
            int temp= Integer.MAX_VALUE;//存储差值:因为提示了取值范围,所以三个数和target的差值已经不可能超过Integer.MAX_VALUE
            for (int i=0;i< nums.length-2;i++){
                int left=i+1;
                int right=nums.length-1;
                //双指针
                while (left<right){
                    //因为之前有序的,所以当i+l+r>target,否则r+1比r更大,会导致>target更多
                    //当然i+l+r<target时候则需要右移l,否则会导致<target更小
                    //如果我们能找到刚好相等的结果直接结束循环,否则我们应该不停比较差值,留下最小值
                    int sum=nums[i]+nums[left]+nums[right];
                    if (sum>target){
                        right--;
                    }else if (sum<target){
                        left++;
                    }else {
                        return  sum;
                    }
                    if (Math.abs(sum-target)<temp){
                        temp=Math.abs(sum-target);
                        ret=sum;
                    }
                }
            }
            return ret;
        }
上一篇下一篇

猜你喜欢

热点阅读