大佬教程收集整理的这篇文章主要介绍了如果我们在 while 循环内有一个 while 循环,我们是否会乘以复杂性? (即使使用了指针),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
下面是一些代码,它接受一个整数 nums 和一个目标整数 target 的列表,并返回 nums 中的两个整数加起来为目标:
def twoSum(nums,target):
pointer_stat = 0
pointer_run = 1
while pointer_stat < len(nums):
while pointer_run and pointer_stat < len(nums):
if nums[pointer_stat] + nums[pointer_run] == target:
return [nums[pointer_run],nums[pointer_stat]]
pointer_run +=1
pointer_run = 1
pointer_stat +=1
print(twoSum(nums,target))
我的问题是,或者更确切地说,我想确认以上是否为 O(n^2) 运行时?
我的推理是我们有两个指针指向列表中的每个整数,并且两个指针每个都会遍历列表一次(因此复杂度为 O(N)),并且因为我们在循环中有一个循环,我们乘以 O(N) 和 O(N) 得到 O(N^2)
空间复杂度为 O(1)。
您是对的,但是 O(n^2) 是最坏情况时间复杂度,因为您在循环中包含一个 return 语句,这可能导致提前退出双循环。
请注意,您可能需要
while pointer_run < len(nums) and pointer_stat < len(nums):
代替
while pointer_run and pointer_stat < len(nums):
因为这会导致不停止循环(小于绑定比“and”强)并无限期运行。
,您可以实际测试并亲自查看:
import matplotlib.pyplot as plt
x=[]
y=[]
n=[1]
def twoSum(nums,target):
pointer_stat = 0
pointer_run = 1
iterations = 0
while pointer_stat < len(nums):
while pointer_run < len(nums) and pointer_stat < len(nums):
if nums[pointer_stat] + nums[pointer_run] == target:
return [nums[pointer_run],nums[pointer_stat]]
iterations +=1
pointer_run +=1
pointer_run = 1
pointer_stat +=1
x.append(len(nums))
y.append(iterations)
return True
for i in range(100):
n.append(1)
twoSum(n,10000)
plt.plot(x,y)
plt.xlabel('N')
plt.ylabel('Iterations')
plt.show()
以上是大佬教程为你收集整理的如果我们在 while 循环内有一个 while 循环,我们是否会乘以复杂性? (即使使用了指针)全部内容,希望文章能够帮你解决如果我们在 while 循环内有一个 while 循环,我们是否会乘以复杂性? (即使使用了指针)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。