美文网首页
16. 最接近的三数之和

16. 最接近的三数之和

作者: 土豆泥加冰谢谢 | 来源:发表于2020-12-04 14:30 被阅读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;
            }
    

    相关文章

      网友评论

          本文标题:16. 最接近的三数之和

          本文链接:https://www.haomeiwen.com/subject/vtqiwktx.html