我的leetcode系列博文一般没什么参考价值,思路一般懒得叙述完整。代码可以看看,不过leetcode的discussion里有更好的。纯属随便记录。
思路
这题跟3SUM的做法差不多。
记得先把数组sort了。
在比较当前solution和存储的solution哪个好的时候,记得使用abs算绝对值。
要思考的是3SUM里使用的left, right双指针寻找exactly的solution,能否用在这里找到closest的solution呢?
可以。
代码
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
if len(nums) < 3:
return 0
nums.sort()
res = nums[0] + nums[1] + nums[2]
for i in range(len(nums) - 2):
left, right = i + 1, len(nums) - 1
while left < right:
summary = nums[i] + nums[left] + nums[right]
if abs(target - summary) < abs(target - res):
res = summary
if summary == target:
return target
elif summary > target:
right -= 1
else:
left += 1
return res