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

京公网安备 11010502036488号