您的位置:首页 > 编程语言 > Java开发

LeetCode16 3Sum Closest

2017-12-22 20:34 429 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode java