python求三个数之和,python写一个函数求三个数的和
本文主要介绍了三个数和的Python实现,具有很好的参考价值。希望对你有帮助。如有错误或不足之处,请不吝赐教。
00-1010三个数之和主题描述思想Python3代码
目录
给你一个包含n个整数的数组nums,判断nums中是否有A,B,C三个元素,
做一个b c=0?请找出所有符合条件的三元组,不要重复。
答案中不允许出现重复的三元组。
示例:
给定数组nums=[-1,0,1,2,-1,4],
满足要求的三元组集合是:
[
[-1, 0, 1],
[-1, -1, 2]
]
三数之和题目描述
1.首先对数组进行排序,可以使用Python内置函数或其他定义的排序算法。
2.应用双指针算法。用索引I固定第一个数,遍历整个数组,第一个数也是三个数中最小的数,然后在数的右边设置两个指针L和R,L=I 1,r=len(nums)-1,
3.确定这三个索引所指向的元素以及它们与0的大小关系。
和0,右指针向左移动一位;和0,左指针向右移动一位。
为了避免重复的三元组,在移动左右指针时,应该跳过所有相邻的相等num[I]。
思路
#导入计算时间的包,调用系统时间。
从时间导入*
#初始时间
t1=时间()
def三和(nums):
nums.sort()
n=len(nums)
res=[]
对于范围(n):内的I
如果两个相邻数字相等,跳过并避免重复
如果i 0和nums[i]==nums[i-1]:
继续
l,r=I ^ 1,n-1
而l r:
if nums[I]nums nums[l]nums 0:
r -=1
而nums[r 1]==nums[r]:
r -=1
elif nums[I]nums[l]nums[r]0:
l=1
而nums[l-1]==nums[l]:
l=1
else:
res.append([nums[i],nums[l],nums[r]])
l=1
r -=1
而nums[l]==nums[l - 1]: l=1
而nums[r]==nums[r 1]: r -=1
返回资源
if __name__==__main__:
nums=[-1,0,1,2,-1,-4]
打印(三个总和(数字))
#结束时间
t2=时间()
#运行时间
运行时间=t2 - t1
打印(运行时)
运行结果:
[[-1, -1, 2], [-1, 0, 1]]
#运行时间
0.0010113716125488281
以上代码有一些思想错误:
如果三个数字都大于0,将退出循环,因为没有满足条件的结果。
没有条件每次都严格评判lr。
修正后的代码:
从时间导入*
t1=时间()
def三和(nums):
nums.sort()
n=len(nums)
res=[]
对于范围(n-2):内的I
如果nums[i] 0:break
如果两个相邻数字相等,跳过并避免重复
如果i 0和nums[i]==nums[i-1]:
继续
l,r=I ^ 1,n-1
而l r:
if nums[I]nums nums[l]nums 0:
r -=1
而l r和nums[r-1]==nums[r]:
r -=1
elif nums[I]nums[l]nums[r]0:
l=1
而l r和nums[l]==nums[l-1]:
l=1
else:
res.append([nums[i],nums[l],nums[r]])
l=1
r -=1
而l r和nums[l]==nums[l - 1]: l=1
而l r和nums[r]==nums[r 1]: r -=1
返回资源
if __name__==__main__:
nums=[-2,-3,0,0,-2]
打印(三个总和(数字))
t2=时间()
运行时间=t2 - t1
打印(运行时)
结果:
[]
#时间
0.0
以上个人经验,希望给你一个参考,也希望你能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。