题目

分析

方法1

通过枚举的方式,算出全部的三个的组合方式,比较得到结果

方法2

对于几个数之和的问题,都是要将数字排序,然后通过双指针的思路来解决的

代码实现

方法1

public class Solution {
    public int threeSumClosest(int[] num, int target) {
       f(num,0,new int[3],0,target);
        return result;
    }

    int min=Integer.MAX_VALUE;
   int result=Integer.MAX_VALUE;
    public  void f(int[] nums,int start,int[] res,int count,int target)
    {
         if(count==res.length)
         {
             int sum=0;
             for(int i=0;i<res.length;i++)
                sum+=res[i];
             if(min>Math.abs(target-sum))
             {
                 result=sum;
                 min=Math.abs(target-sum);
             }
             return ;
         }
         for(int i=start;i<nums.length;i++) {
             res[count] = nums[i];
             f(nums, i + 1, res, count + 1,target);
         }
    }
}

方法2

public static int threeSumClosest(int[] nums, int target)
    {
        Arrays.sort(nums);
        int res=nums[0]+nums[1]+nums[2];
        for(int i=0;i<nums.length;i++)
        {
            int start=i+1;
            int end=nums.length-1;
            while(start<end)
            {
                int sum=nums[i]+nums[start]+nums[end];
                if(Math.abs(res-target)<Math.abs(sum-target))
                {
                    res=sum-target;
                }
                if(sum>target)
                {
                    end--;
                }
                else if(sum<target)
                {
                    start++;
                }
                else
                {
                    return sum;
                }
            }
        }
        return res;
    }

学习情况

1次