LeetCode -- 3SumCloset

Question:

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

Analysis:

与3Sum题目比较起来,这里不需要去重检测,只需要有两个变量控制sum和与target间的差距即可。总体的策略同3Sum。

Answer:

public class Solution {
        public int threeSumClosest(int[] nums, int target) {
        int tar = Integer.MAX_VALUE;
        int res = 0;
        Arrays.sort(nums);
        
        for(int i=0; i<nums.length-2; i++) {
            int j = i + 1;
            int k = nums.length - 1;
             
            while(j < k) {
                int sum = nums[i] + nums[j] + nums[k];
                if(sum == target)
                    return sum;
                else {
                    int dif = Math.abs(sum - target);
                    if(dif < tar) {
                        tar = dif;
                        res = sum;
                    }
                    if(sum < target)
                        j++;
                    else
                        k--;
                }
            }
        }
        return res;
    }
}

 

posted @ 2015-09-08 22:19  江湖小妞  阅读(183)  评论(0编辑  收藏  举报