[LeetCode][Java] 3Sum Closest

原创 2015年07月09日 12:07:06

题目:

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    For example, given array S = {-1 2 1 -4}, and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

题意:

给定一个包含n个整数的数组S,在数组中找出三个整数,使得这三个整数的和与目标值最为接近。返回这三个整数的和。你可以假定对于每个整数,都有确定的一个解。

    For example, given array S = {-1 2 1 -4}, and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

算法分析:


  参考博客:http://www.zhuangjingyang.com/leetcode-3sum/

和3Sum异曲同工。 不过这里我们要判断的条件不在是三个数字和为0而是和为一个更加接近target的数字。

我们依然采用3Sum的算法,若有三个数字x1 + x2 + x3 = result 我们所求的便是让result最接近target。因此对于num,首先排序,然后遍历每个数字其下标大于自身的两个数字。然后设置两个全局变量 一个 minVal 用于记录其与target的距离,当距离减小时便更新result的新值。


AC代码:

<span style="font-size:12px;">public class Solution 
{
	private  int minVal = Integer.MAX_VALUE;
	private  int result = 0;
    public  int threeSumClosest(int[] num, int target) 
    {
    	Arrays.sort(num);
    	//if number is less than 3 or num is null it's can't be calc
    	if(num.length <3 ||  num ==null)
    		return target;
    	for(int i=0;i<num.length;i++)
    	{
    		if(i>0 && num[i] == num[i-1])
    			continue;
    		find(i,num,num[i],target);
    	}
    	return result;
    }
    public  void find(int index,int[] num,int target,int res)
    {
    	int l = index+1; //low is equal to index+1 just because we just search element that is bigger than itself
    	int r = num.length - 1;
    	while(l<r)
    	{
    		if( Math.abs(num[l] + num[r] + target - res) <= minVal)
    		{
    			minVal = Math.abs(num[l] + num[r] + target - res);//it's more closer
    			result = num[l] + num[r] + target;
    		}
    		if(num[l] + num[r] + target >res)
    			r--;
    		else
    			l++;
    	}
    }
}</span>


版权声明:本文为博主原创文章,转载注明出处

LeetCode 16 3Sum Closest(C,C++,Java,Python)

Problem: Given an array S of n integers, find three integers in S such that the sum is closest ...
  • runningtortoises
  • runningtortoises
  • 2015年05月09日 22:26
  • 1729

【LeetCode】3Sum Closest 解题报告

【题目】 Given an array S of n integers, find three integers in S such that the sum is closest to a gi...
  • ljiabin
  • ljiabin
  • 2014年10月30日 16:57
  • 7787

leetcode-java-16. 3Sum Closest

思路: 先升序排序,然后用第一重for循环确定第一个数字。 然后在第二重循环里,第二、第三个数字分别从两端往中间扫。 如果三个数的total等于target,返回target。 如果三个数的t...
  • github_34514750
  • github_34514750
  • 2016年06月07日 21:47
  • 487

16. 3Sum Closest Leetcode Python

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • hyperbolechi
  • hyperbolechi
  • 2015年01月17日 10:10
  • 695

leetcode第16题——**3Sum Closest

题目 Given an array S of n integers, find three integers in S such that the sum is closest to a give...
  • buptlrw
  • buptlrw
  • 2016年01月22日 14:58
  • 360

LeetCode16——3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given num...
  • booirror
  • booirror
  • 2015年03月12日 00:00
  • 1308

[LeetCode] 016. 3Sum Closest (Medium) (C++/Java/Python)

[LeetCode] 016. 3Sum Closest (Medium) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年03月03日 19:10
  • 2502

[LeetCode]3Sum

题目要求如下: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = ...
  • zhouworld16
  • zhouworld16
  • 2013年11月24日 11:20
  • 7435

【LeetCode】3Sum 解题报告

这道题凭我现有知识实在解答不上来,只好网上搜索解法,才发现 K Sum 是一类问题,但是网上没有比较简洁的代码,我想对于初学者来说,可能还是想先看看这道题怎么解,然后才有兴趣去看其扩展吧。 【题目】 ...
  • ljiabin
  • ljiabin
  • 2014年10月30日 16:00
  • 28597

LeetCode 15 3Sum (C,C++,Java,Python)

Problem: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = ...
  • runningtortoises
  • runningtortoises
  • 2015年05月09日 21:06
  • 4061
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode][Java] 3Sum Closest
举报原因:
原因补充:

(最多只允许输入30个字)