一、题目1
二、思路
和上一题思路类似,我直接用上一道题的代码改的
这个是上一题的链接
三、代码
import java.util.Arrays;
public class T016 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {-1, 2, 1, -4 };
System.out.println( threeSumClosest( nums, 1) ); //2
int[] nums1 = {1,1,-1,-1,3};
System.out.println( threeSumClosest( nums1, -1) ); //-1
}
public static int threeSumClosest(int[] nums, int target) {
int result;
//将result初始化
if ( nums.length >= 3 )
result = nums[0]+nums[1]+nums[2];
else
return 0;
//将数组排序
Arrays.sort( nums );
//按照顺序遍历所有数
for ( int k = 0; k < nums.length-2; k++ ){
//l和r分别指向剩余所有数的最小值和最大值
int l = k+1, r = nums.length-1;
//从两边到中间,依次遍历,得到最小值是nums[k]的所有数对
while ( l < r ){
int tmp = nums[k] + nums[l] + nums[r];
//判断结果是否更优
if ( Math.abs( tmp-target ) < Math.abs( result-target ) )
result = tmp;
//三数之和偏大,r减一
if ( tmp > target ){
r--;
//三数之和偏小,l加一
}else{
l++;
}
}
}
return result;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ↩︎