本文主要是介绍LeetCode16:3Sum Closest,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:先将数组排序,固定第一个数k,然后设定两个指针i和j,i从k+1开始,j从nums.length-1开始,每次求nums[i]+nums[j]+nums[k]到target的距离,即绝对值。用一个变量保存距离,一个变量保存三个数的和,每次与之前的距离比较,如果比之前的距离小,则更新三个数的和,同时更新距离,如果nums[i]+nums[j]+nums[k]大于target,则将j左移,如果nums[i]+nums[j]+nums[k]小于target,则将i右移,以此缩小nums[i]+nums[j]+nums[k]与target的距离。
代码:
public class ThreeSumClosest {public static void main(String[] args) {int[] nums={-1, 2, 1, -4};System.out.println(threeSumClosest(nums,1));}public static int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int closest = Integer.MAX_VALUE;int abs = Integer.MAX_VALUE;for (int i = 0; i < nums.length-2; i++) {int left = i+1,right=nums.length-1;while(left<right){int sum = nums[i]+nums[left]+nums[right];if(Math.abs(sum-target)<abs){closest = sum;abs = Math.abs(sum-target);}if(sum-target<0)left++;else if(sum-target>0)right--;elsereturn sum;}}return closest;}
}
输出:2
这篇关于LeetCode16:3Sum Closest的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!