【Leetcode】排序+双指针-16
  KRe60ogUm4le 18天前 86 0

>​​0️⃣python数据结构与算法学习路线​​

>学习内容:
>- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等...
>- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等...

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

输入输出:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

解题思路:

和15题类似

算法实现: 

class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
l = len(nums)
nums.sort()
m = nums[0]+ nums[1]+nums[2]
for i1 in range(l):
# 不进行重复的无意义循环
if i1 > 0 and nums[i1] == nums[i1-1]:
continue
i2 = i1 + 1
i3 = l - 1
while i2 < i3:
ans = nums[i1] + nums[i2] + nums[i3]
if ans == target:
return ans
if abs(ans - target) < abs(m - target):
m = ans
if ans < target:
while i2 < i3 and nums[i2] == nums[i2+1]:
i2 += 1
i2+=1
elif ans > target:
while i2 < i3 and nums[i3] == nums[i3-1]:
i3 -= 1
i3 -=1
return m

出现问题:

1. 绝对值abs()

2. m可以设置为一个极大值,正负无穷大为float("inf"), float("-inf")

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 18天前 0

暂无评论

推荐阅读
KRe60ogUm4le
最新推荐 更多

2024-05-31