码迷,mamicode.com
首页 > 其他好文 > 详细

3sum closest

时间:2015-06-29 11:32:44      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

1. Question

给定一个整型数组和key,找三个数,使其和与key最相近,返回这三个数的和。(假设至少会有一个解)

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).

2. Solution(O(n2))

相似题:3Sum

考虑特殊情况:

  • 数组元素个数<3

采用twoSum的双指针法,只需额外维护一个最近的三个数和即可。

技术分享
public class Solution {
    public int threeSumClosest( int[] nums, int target ){
        int len = nums.length;
        if( len<3 )
            return 0;
        
        Arrays.sort( nums );
        int closestThree = nums[0] + nums[1] + nums[2];
        for( int i=0; i<len-2; i++ ){
            //use two pointers find the closest two for i
            for( int j=i+1, k=len-1; j<k; ){
                int nowThree = nums[i] + nums[j] + nums[k];
                int distance = target - nowThree;
                //update j & k
                if( distance < 0 )
                    k--;
                else if( distance > 0 )
                    j++;
                //find the exact three integers that sum to target
                else
                    return target;
                //update closestThree
                if( Math.abs( distance) < Math.abs( target - closestThree))
                    closestThree = nowThree;
            }
        }
        return closestThree;
    }
}
View Code

 

3sum closest

标签:

原文地址:http://www.cnblogs.com/hf-cherish/p/4607017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!