LeetCode16 3Sum Closest

来源:互联网 发布:linux ntp命令 编辑:程序博客网 时间:2024/06/09 06:12

LeetCode16题:求取一个数组中,三个数字之和与所给target最接近。
给定的数组为nums,目标值为target
解题思路:
1、首先判断nums个数是否大于三个;若<=3,返回三个数的和即可,否则对nums排序;
2、nums数字大于三个时。首先初始化result为前两个值和最后一个值的和。
3、遍历其中所有的值,并从两边(left、right)向中间靠近。将其三个数的值sum,如果sum大于target,则right减小(因为加的大了),sum小于时,则left增加(sum加的小了),如此循环并更新最近的值result。

package Array;import java.util.Arrays;/** * Created by AllenLee on 2017/12/22. */public class ThreeSumClosest {    public int threeSumClosest(int[] nums, int target) {        int result = 0;        if (nums.length <= 3) {            for (int num : nums) {                result += num;            }            return result;        }        result = nums[0] + nums[1] + nums[nums.length - 1];        Arrays.sort(nums);        for (int i = 0; i < nums.length - 2; i++) {            int left = i + 1, right = nums.length - 1;            while (left < right) {                int sum = nums[i] + nums[left] + nums[right];                if (sum > target) right--;                else left++;                if (Math.abs(sum - target) < Math.abs(result - target))                    result = sum;            }        }        return result;    }}