HF_Cherish

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

posted on 2015-06-29 11:02  HF_Cherish  阅读(156)  评论(0编辑  收藏  举报