leetcode [16] 最接近的三数之和
Contact me:
Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
来自题解:
先排序,遍历定位第一个元素,两个指针指向后面的首和尾,如果小于目标,增大左指针,如果大于目标,减少右指针,如果等于目标直接返回结果。
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
if len(nums) < 3:
return 0
nums.sort()
res = 999
for i in range(len(nums)):
left, right = i + 1, len(nums) - 1
while left < right:
newres = sum([nums[i], nums[left], nums[right]])
if abs(newres - target) < abs(res - target):
res = newres
if newres - target < 0:
left += 1
elif newres - target > 0:
right -= 1
else:
return target
return res