3Sum Closest
先数组排序,三个数之和减去目标值的绝对值较小,则更新之并记录此三个数之和,否则检查三个数和与目标值大小,比目标值大则减小右边的数,小则增加左边,等于的就是最接近的,直接返回
public static int close3sum(int[] arr,int tar){
if(arr.length<3) return 0;
int min = Integer.MAX_VALUE;
int left=0;;
int right=arr.length-1;
int com;
int res=0;
Arrays.sort(arr);
for(int i=0;i<arr.length-2;i++){
left=i+1;
while(left<right){
int sum = arr[i] + arr[left] + arr[right];
com = Math.abs(sum-tar);
if(com<min){
res =sum;
min = com;
}
if(sum>tar){
right--;
} else if(sum<tar){
left++;
} else{
return tar;
}
}
}
System.out.println(res);
return res;
}
网友评论