概述
【题目】
【思路】
先将nums排序,计算temp = nums[i]+nums[left]+nums[right]。
判断若temp>target,那就希望temp小一点,right左移(变小)。
【python】
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
#先将数排序
nums.sort()
#初始化res,用前三个数之和
res = sum(nums[:3])
#i遍历nums,每次循环left和right分别向中间移动
for i in range(len(nums)):
left = i+1
right = len(nums)-1
while left<right:
temp = nums[i]+nums[left]+nums[right]
#abs相减判断,res替换更接近target的值
if abs(res-target) > abs(temp-target):
res = temp
#判断是left右移还是right左移
if temp>target:
right = right-1
else:
left = left+1
return res
【结果】
【学习大牛代码】
class Solution(object):
def threeSumClosest(self, nums, target):
nums.sort()
length = len(nums)
closest = []
for i in range(length-2):
left = i+1
right = length-1
#先计算nums[i]对应最小的三数和,如果最小都大于target则直接添加
if nums[i] + nums[left] + nums[left+1] > target:
closest.append(nums[i] + nums[left] + nums[left+1])
#计算nums[i]对应最大的三数和,如果最大都小于target则直接添加
elif nums[i] + nums[right] + nums[right-1] < target:
closest.append(nums[i] + nums[right] + nums[right-1])
#否则按照原来方法逐个计算每个三数和
else:
while left < right:
closest.append(nums[i] + nums[left] + nums[right])
if closest[-1] < target:
left += 1
elif closest[-1] > target:
right -= 1
else:
return target
#closest按照离target最近的条件排序,返回最接近target的值
closest.sort(key=lambda x: abs(x-target))
return closest[0]
【提交结果】
【总结】
closest.sort(key=lambda x: abs(x-target))采用了sort排序:自定规则的条件排序。
key=lambda x: 是固定的格式,x是列表的元素
abs(x-target) : 用x和target的距离为自定的排序规则
最后
以上就是多情棒球为你收集整理的16.最接近的三数之和(python)的全部内容,希望文章能够帮你解决16.最接近的三数之和(python)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复