leetcode 16: 3Sum Closest
问题描述
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).
解题思路
这一题和leetcode15 : 3sum 基本思路是一样的,将3sum问题转化为2sum问题,只是判断条件出现了一些差别,时间复杂度也是O(n^2).
JAVA代码
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = nums[0] + nums[1] + nums[nums.length-1];
for(int i=0; i < nums.length-2; i++) {
int low = i+1;
int high = nums.length-1;
while(low < high) {
if(Math.abs(target - nums[i] - nums[low] - nums[high]) < Math.abs(target - res)) {
res = nums[i] + nums[low] + nums[high];
}
if(target > nums[i] + nums[low] + nums[high] ) {
low++;
}
else {
high--;
}
}
}
return res;
}