16. 最接近的三数之和

难度中等530

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例:

1
2
3
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

提示:

  • 3 <= nums.length <= 10^3
  • -10^3 <= nums[i] <= 10^3
  • -10^4 <= target <= 10^4

通过次数141,122

提交次数308,415

和leetcode15相似,主要思路还是排序+双指针

我使用了minA维护了当前的最小值,然后使用res记录和;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
#排序: -4 -1 1 2
#minA 对于遍历到的每一个i,维护minA;
#每一次循环,如果大于target,R=R-1;否则L=L+1;如果相等,返回;

n=len(nums)

if n<3 or not nums:
return NULL
minA=sys.maxsize # INT最大值
res=minA
nums.sort()
for i in range(0,n-2):
L=i+1
R=n-1
while L<R:
cur=nums[i]+nums[L]+nums[R]
if cur==target:
minA=0

return cur
elif cur<target:
tempres=target-cur
if abs(tempres)<minA:
minA=abs(tempres)
res=cur
L=L+1
else:
tempres=cur-target
if abs(tempres)<minA:
minA=abs(tempres)
res=cur
R=R-1



return res