LeetCode16: 最接近的三数之和

问题:

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与target最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

本题主要是利用双指针,与快速排序比较类似
1、首先对给定数组进行排序
2、从第一个(最小)的数字开始进行,设置两个指针,小指针在当前第一个数的右边一个,大指针在数组最大方向
3、对当前数字与预期数字进行比较,如果小于预期则小指针向前,使结果变大,反之则大指针向后
4、
LeetCode16: 最接近的三数之和_第1张图片引用:https://leetcode-cn.com/problems/3sum-closest/solution/hua-jie-suan-fa-16-zui-jie-jin-de-san-shu-zhi-he-b/
画解算法

代码

 public int threeSumClosest(int[] nums, int target) {
	 Arrays.sort(nums);
	 int ans = nums[0]+nums[1]+nums[2];//直接将ans设置成内部可能的一个值,免去了可能会数较大的麻烦
	 int sum = 0;
	 int now = 0;
	 if(nums.length==0||nums==null)
	 {
		 return 0;
	 }
	 for(int i=0;itarget)//将sum与target直接比较,比较明智的方法,不用先算出来在进行判断,比target大就往小的方向走,小就往大的方向走
			 {
				 k--;
			 }else {
				 j++;
			 }
			 
		 }
	 }
	 return ans;
 }

你可能感兴趣的:(LeetCode)