LeetCode 16. 3Sum Closest
Description
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
Code
- java
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int len = nums.length;
int result = 0;
boolean hasResult = false;
for(int i = 0; i < len-2; i++) {
int lo = i + 1, hi = len-1;
while(lo < hi) {
int sum = nums[i] + nums[lo] + nums[hi];
if(sum == target) {
return target;
} else {
if(!hasResult || Math.abs(sum - target) < Math.abs(result - target)) {
hasResult = true;
result = sum;
}
if(sum > target) {
hi--;
} else {
lo++;
}
}
}
}
return result;
}
}
- Others’ solution
- Time complexity O(N^2)
public class Solution {
public int threeSumClosest(int[] num, int target) {
int result = num[0] + num[1] + num[num.length - 1];
Arrays.sort(num);
for (int i = 0; i < num.length - 2; i++) {
int start = i + 1, end = num.length - 1;
while (start < end) {
int sum = num[i] + num[start] + num[end];
if (sum > target) {
end--;
} else {
start++;
}
if (Math.abs(sum - target) < Math.abs(result - target)) {
result = sum;
}
}
}
return result;
}
}
Conclusion
- 接上题,一个简单的变形