三重循环
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
length = len(nums)
minsum = float("inf")
p1 = 0
while p1 < length:
p2 = p1 + 1
while p2 < length:
p3 = p2 + 1
while p3 < length:
if abs(minsum) > abs(target - (nums[p1] + nums[p2] + nums[p3])):
minsum = target - (nums[p1] + nums[p2] + nums[p3])
best = nums[p1] + nums[p2] + nums[p3]
p3 += 1
p2 += 1
p1 += 1
return best
排序+双指针
判断重复
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
length = len(nums)
minsum = float("inf")
best = 0
for i in range(length):
if i > 0 and nums[i] == nums[i - 1]:
continue
L = i + 1
R = length - 1
while L < R:
while L < R and nums[L] == nums[L + 1]:
L += 1
while L < R and nums[R] == nums[R - 1]:
R -= 1
sum = target - (nums[i] + nums[L] + nums[R])
if minsum > abs(sum):
minsum = abs(sum)
best = nums[i] + nums[L] + nums[R]
if sum == 0:
return best
elif sum > 0:
L += 1
else:
R -= 1
return best
不判断重复
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
length = len(nums)
sumdifference = float("inf")
last = 0
for i in range(length):
L = i + 1
R = length - 1
while L < R:
sum = target - (nums[i] + nums[L] + nums[R])
if sumdifference > abs(sum):
sumdifference = abs(sum)
last = nums[i] + nums[L] + nums[R]
if sum == 0:
return last
elif sum > 0:
L += 1
else:
R -= 1
return last
总结
1、思路同15题,但是由于只需输出最接近target的元素和,所以可以不进行重复数组判断。
2、暴力破解的三重循环,不出所料依旧超时。
3、python中的无穷大表示方法num = float(“inf”)。