-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path0016.py
38 lines (31 loc) · 1.06 KB
/
0016.py
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:
nums.sort()
max1 = nums[len(nums) - 1]
max2 = nums[len(nums) - 2]
limit = 10**5
high = +limit
low = -limit
for i in range(len(nums)):
# optimization
if nums[i] + max2 + max1 <= low:
continue
for j in range(i+1, len(nums)):
# optimization
if nums[i] + nums[j] + max1 <= low:
continue
for k in range(j+1, len(nums)):
sum = nums[i] + nums[j] + nums[k]
if high > sum and sum >= target:
high = sum
if low < sum and sum <= target:
low = sum
# optimization
if sum >= target:
break
diffHigh = abs(high - target)
diffLow = abs(low - target)
if diffHigh < diffLow:
return high
else:
return low