You may assume that each input would have exactly one solution.
因为题目假设每个
i
n
p
u
t
input
input 都只有唯一解,因此不用担心重复
JAVA
import java.util.Arrays;
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = 100000; //比最大小值差的三倍还大
for (int k = 0; k < nums.length - 2; k++) {
int i = k + 1, j = nums.length - 1;
while (i < j) {
int sum = nums[k] + nums[i] + nums[j];
if (sum == target) {
return target;
}
if (Math.abs(sum - target) < Math.abs(res - target)) { //核心
res = sum;
}
if (sum < target) {
i++;
} else j--;
}
}
return res;
}
}
Python
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
n = len(nums)
res = 10**5
# 根据差值的绝对值来更新答案
def update(cur):
nonlocal res # 将 res定义为类内函数都可以访问的变量
if abs(cur - target) < abs(res - target):
res = cur
for k in range(n-2):
i, j = k + 1, n - 1
while i < j:
s = nums[k] + nums[i] + nums[j]
if s == target:
return target
update(s)
if s > target:
j -= 1
else:
i += 1
return res