题目:16. 最接近的三数之和
易错点:
- 比较的时候,要减去target 在算结果
我的代码:
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums = sorted(nums)
max_res = float('inf')
min_res = float('-inf')
for i in range(len(nums)):
left = i + 1
right = len(nums) - 1
while left < right:
cur_buy = nums[i] + nums[left] + nums[right] # 2 目标是 1
if cur_buy - target < 0 : # 说明目前购买的不够4 10
min_res = max(min_res,cur_buy)
left += 1 # 多加一个
if cur_buy- target > 0: # 说明买多了
max_res = min(max_res, cur_buy) # 取小的
right -= 1 # 减去一个
if cur_buy == target: # 正好买到了
return target
# 返回更接近的那个
if abs(max_res - target) > abs(min_res-target):
return min_res
else:
return max_res
大神的代码:
class Solution:
def threeSumClosest(self, nums, target):
ret = float('inf')
nums.sort()
length = len(nums)
for i in range(length - 2):
left = i + 1
right = length - 1
while left < right:
tmp = nums[i] + nums[left] + nums[right]
# 如果新计算的tmp更靠近target 就更新为tmp
# 否则就继续用原来的ret
ret = tmp if abs(tmp - target) < abs(ret - target) else ret
if tmp == target:
return target
if tmp > target:
right -= 1
else:
left += 1
return ret
作者:清风Python
链接:https://leetcode.cn/problems/3sum-closest/solutions/758394/16zui-jie-jin-de-san-shu-zhi-he-pythonsh-ujl9/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
扩展写法:
总结:
- 大神跟我写的差不多,重点是要理解这句话:
ret = tmp if abs(tmp - target) < abs(ret - target) else ret
- 我的思路还可以。
- 继续加油!!!!
- 我可以的!!