题目
分析
方法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次