16. 3Sum Closest

来源:互联网 发布:mac地址表老化时间 编辑:程序博客网 时间:2024/05/18 02:08

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


java
class Solution {    public int threeSumClosest(int[] nums, int target) {        if (nums == null || nums.length < 3) {            return 0;        }        Arrays.sort(nums);        int diff = 0;        int ref = Integer.MAX_VALUE;        for (int i = 0; i < nums.length - 2; i++) {            int temp = util(nums, i + 1, nums[i], target);            if (ref > Math.abs(temp - target)) {                ref = Math.abs(temp - target);                diff = temp;            }        }        return diff;    }    private int util(int[] nums, int start, int val, int target) {        int left = start;        int right = nums.length - 1;        int diff = 0;        int ref = Integer.MAX_VALUE;        int value = 0;        while (left < right) {            value = val + nums[left] + nums[right];            if (left < right && value < target) {                left++;                if (ref > Math.abs(value - target)) {                    ref = Math.abs(value - target);                    diff = value;                }            }            if (left < right && value > target) {                right--;                if (ref > Math.abs(value - target)) {                    ref = Math.abs(value - target);                    diff = value;                }            }            if (left < right && value == target) {                diff = value;                break;            }        }        return diff;    }}