Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个函数的最大优点是什么(加上LeetCode的一个问题)_Python_Algorithm_Time Complexity_Big O - Fatal编程技术网

Python 这个函数的最大优点是什么(加上LeetCode的一个问题)

Python 这个函数的最大优点是什么(加上LeetCode的一个问题),python,algorithm,time-complexity,big-o,Python,Algorithm,Time Complexity,Big O,我只是试图通过我的leetcode解决方案中的大O来练习推理 这是我对一个名为“”的问题的解决方案。我只是想知道什么是大O时代在这里。我的想法和笔记都在代码中 类解决方案: def plusOne(自身,数字:列表[int])->列表[int]: def增量器(数字,位置): 如果(位数[-place]!=9):#我的基本情况 位数[-place]=位数[-place]+1 返回数字 其他: 尝试: 下一个=数字[-place-1] 除索引器外: 数字=[0]*(位置+1)#这需要O(n)个时间

我只是试图通过我的leetcode解决方案中的大O来练习推理

这是我对一个名为“”的问题的解决方案。我只是想知道什么是大O时代在这里。我的想法和笔记都在代码中

类解决方案:
def plusOne(自身,数字:列表[int])->列表[int]:
def增量器(数字,位置):
如果(位数[-place]!=9):#我的基本情况
位数[-place]=位数[-place]+1
返回数字
其他:
尝试:
下一个=数字[-place-1]
除索引器外:
数字=[0]*(位置+1)#这需要O(n)个时间?
数字[0]=1
返回数字
位数[-place]=0
#递归案例
返回递增式(数字,位置+1)#递归大小写#O(n)?
返回递增器(数字,1)

我相信这将导致O(n^2)更糟,因为这意味着它将遍历整个数组,然后创建一个大小为n+1的新数组,填充0。我的想法正确吗?这会发生在像9999999这样的数字上,其中所有的9都会被翻转,然后为新的位置创建新的数组。

你不是很正确,但很接近;在Python中,为了在最坏的情况下达到这一行,您需要遍历整个列表,也就是O(n)。所以你有O(n+n),也就是O(2n)(但我们丢弃了乘法器,所以我们会再次将其归类为O(n)

但正如切普纳所说,迭代在这里会更好。为了摆脱ariela,您可以使用


如果place+1>=len(数字)

你不应该这样使用
next
next
是python中的一个函数,在生成器中调用下一个值时使用。更重要的是,这里没有什么理由使用递归而不是循环。这将产生更多的开销,并限制您可以处理的列表长度,而不会达到堆栈大小限制。一个好的知识库条目——因此,一个好的堆栈溢出问题——可能对其他人有帮助,而不仅仅是第一个提出问题的人。下一个问“这个函数的大O时间是多少?”的人不太可能有完全相同的函数,或者——即使他们有他们将能够找到这个特定的问题。即使你对你正在实施的算法有一个名称,将该算法的名称放在问题标题中,也会让有相同问题的人更容易找到你的问题,从而使它更有可能成为我们网站的一部分。@CharlesDuffy我按照您的建议更新了标题:)谢谢您的回答!这对我来说是清楚的,有道理的。我能看出它是怎样的n+n,因为复制只在最后发生一次,而不是每次迭代。@Emma我相信它是O(1),不是吗?因为它正在更改该索引处的元素,这是一个常量操作。