LeetCode刻意练习05--最接近的三数之和

て烟熏妆下的殇ゞ 提交于 2020-03-05 23:01:03

最接近的三数之和

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

思路:
1.将给定的数组进行排序
2.遍历数组,并且将第一个元素置为nums[i]
3.定义两个指针,左指针为 i+1,右指针为数组最后一个元素的下标。
4.看他们的和,如果他们的和比我们想要的和小,那么左指针右移,如果比我们想要的大,那么右指针左移。如果有更接近的三数之和,那么我们更新sum
优化:
去除重复元素

 public int threeSumClosest(int[] nums, int target) {
		 
		 Arrays.sort(nums);
		// int closest_num=10000;
		int closest_num=nums[0]+nums[1]+nums[2];
		 for (int i = 0; i < nums.length-2; i++) {
			 int l=i+1,r=nums.length-1;
			 while(l<r)
			 {
				 int sum=nums[l]+nums[r]+nums[i];
				 if(Math.abs(target-sum)<Math.abs(target-closest_num))
					 closest_num=sum;
				 if(sum<target)
				 {
				 l++;
				 while(l<r&&nums[l]==nums[l+1])//去重
				 l++;
				 }
				 else
				 {
					 r--;
				   	while(l<r&&nums[r]==nums[r+1])//去重
                      r--;

				 }
				
			 } 
			if(i>0&&nums[i]==nums[i-1])//去重
			continue;
		}
		 return closest_num;
 }
		 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!