- 3Sum Closest
Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example

Solution 1
Time Complexity: O(n^2), Space Complexity:O(1)
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = nums[0]+nums[1]+nums[2];
int diff = Math.abs(res-target);
for(int i = 0; i < nums.length-2; i++) {
if( i > 0 && nums[i-1]==nums[i])
continue;
if(res == target)
break;
int begin = i+1;
int end = nums.length-1;
while(begin < end) {
int sum = nums[i]+nums[begin]+nums[end];
int newDiff = Math.abs(sum-target) ;
if(newDiff < diff) {
res = sum;
diff = newDiff;
}
if(sum>target) {
end--;
} else if(sum == target){
break;
} else {
begin++;
}
}
}
return res;
}
}
Solution 2: improved a little bit by passing the duplicate case
Time Complexity: O(n^2), Space Complexity:O(1)
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = nums[0]+nums[1]+nums[2];
int diff = Math.abs(res-target);
for(int i = 0; i < nums.length-2; i++) {
if( i > 0 && nums[i-1]==nums[i])
continue;
int begin = i+1;
int end = nums.length-1;
while(begin < end) {
int sum = nums[i]+nums[begin]+nums[end];
int newDiff = Math.abs(sum-target) ;
if(newDiff < diff) {
res = sum;
diff = newDiff;
}
if(sum>target) {
end--;
while(begin<end && nums[end+1]==nums[end])
end--;
} else if(sum == target){
return res;
} else {
begin++;
while(begin<end && nums[begin]==nums[begin-1])
begin++;
}
}
}
return res;
}
}
本文探讨了在给定整数数组中寻找三个数,使其和最接近特定目标值的问题。提供了两种解决方案,均采用排序加双指针策略,时间复杂度为O(n^2),空间复杂度为O(1)。通过实例演示了算法的实现过程。
351

被折叠的 条评论
为什么被折叠?



