• 16-最接近的三数之和


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

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

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

    思路:和15题的三数之和如出一辙,15是要求求出三个数等于零的集合,还要求集合不重复。本题说了只有一个答案,而且返回的是这个和,不是三个数组成的List,方便了不少。

    还是遍历【0,length-2】之间的所有数,对于每一个数。使用双指针找这个数右边的子数组里的两个数。初始时,把0,1,2这三个下标的数做个加法,得到  juli这个变量,求新的三数之和,和target-juli之间哪个更小,如果有了新的最小值,juli=sum,开启下个循环。如果juli==sum,直接返回结果就行。因为不可能有更接近的结果了。否则,假如target<sum,右指针减一。。。

    Math.abs()函数是求绝对值的,记住用!

    class Solution {//比起上一题求sum==0的三数之和,少了各种去掉冲服情况的语句,因为上一期是找不重复三元组,这里题目假设只有一个结果了,此外,返回的是总和而不是差值,记住abs函数
        public int threeSumClosest(int[] nums, int target) {
            // List<List<Integer>> res=new ArrayList();
            int len=nums.length;
            Arrays.sort(nums);//排序
            if(len<3||nums==null)
            {
                return 1000;
            }
            int juli=nums[0]+nums[1]+nums[2];
            for(int i=0;i<len-2;i++)
            {   
                //if(i>0&&nums[i]==nums[i-1])continue;//少了这一步去重,-1!   I和L R都用去重
                int L=i+1;
                int R=len-1;
                
                while(L<R)
                {
                   int sum=nums[i]+nums[L]+nums[R];
                  // int jushi=target-sum;
                   //if(jushi<0) jushi=-jushi;
    
                if(Math.abs(target - sum) < Math.abs(target - juli))//重要
                {
                    juli=sum;
                   
                }
                
                else if((target-sum)>0)//目标值大于sum。说明left有点小
                {
                    L++;
                }
               else if((target-sum)<0)
               {
                   R--;
               }
               else
               {
                   return juli;
               }
                }
    
            }
            return juli;
        }
    }
    

      

  • 相关阅读:
    jquery Table基础操作
    window.opener
    CSS基础
    CSS样式
    CSS框架
    常用正则表达式
    HTML字体对应word字体
    SQL获取所有数据库名、表名、储存过程以及参数列表
    SQL集合运算:差集、交集、并集
    sql数据分页
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12752298.html
Copyright © 2020-2023  润新知