Python 我的代码的运行时复杂性是O(a+;b)?
我刚刚在LeetCode上解决了这个问题。这很简单,但我不确定代码的运行时复杂性。谁能给我解释一下吗Python 我的代码的运行时复杂性是O(a+;b)?,python,Python,我刚刚在LeetCode上解决了这个问题。这很简单,但我不确定代码的运行时复杂性。谁能给我解释一下吗 def addBinary(self, a: str, b: str) -> str: carry = 0 result = '' a = list(a) b = list(b) while a or b or carry: if a: carry +
def addBinary(self, a: str, b: str) -> str:
carry = 0
result = ''
a = list(a)
b = list(b)
while a or b or carry:
if a:
carry += int(a.pop())
if b:
carry += int(b.pop())
result += str(carry %2)
carry //= 2
return result[::-1]
循环将一直运行,直到a或b中没有任何内容,进位为0。 每次迭代时,都会将a和b中的条目数减少一个。因此,迭代的总次数是
max(len(a),len(b))+x
,其中x
是1,如果在末尾还有进位,则为0,否则,因为x基本上由一个常数(常数1)限定,所以对于渐近部分,可以忽略它
请注意,
(len(a)+len(b))/2循环将一直运行,直到a或b中没有任何内容,进位为0。
每次迭代时,都会将a和b中的条目数减少一个。因此,迭代的总次数是max(len(a),len(b))+x
,其中x
是1,如果在末尾还有进位,则为0,否则,因为x基本上由一个常数(常数1)限定,所以对于渐近部分,可以忽略它
注意(len(a)+len(b))/2No,它是O(max(len(a),len(b))
。循环的每次迭代,而
循环处理a
和b
中的一个元素。即使它已经到达较短字符串的末尾,它也必须在每次处理较长字符串的一个元素时,对该字符串执行if
测试。循环中的最后两条语句以任意一种方式执行
为了计算复杂性,我们忽略了这样一个事实,即当它到达较短字符串的末尾时,每次迭代中执行的语句少了一个。否,它是O(max(len(a),len(b))
。循环的每次迭代,而
循环处理a
和b
中的一个元素。即使它已经到达较短字符串的末尾,它也必须在每次处理较长字符串的一个元素时,对该字符串执行if
测试。循环中的最后两条语句以任意一种方式执行
为了计算复杂度,我们忽略了这样一个事实,即当它到达较短字符串的末尾时,在每次迭代中执行的语句较少。这里最糟糕的时间复杂度可能是O(max(len(a),len(b))
说明:
设a='11111'和b='11'
while循环将迭代,直到列表a和列表b都为空且进位等于0,在我们的示例中,第二次迭代后,列表b将为空,但while循环仍将继续,直到列表a变为空,进行len(max(a,b))次,即len(a)=8次迭代,即使在这之后,它将再迭代一次以添加进位(虽然可能已从循环中移出)
这个解决方案可以是即兴的。提示:将while条件更改为最小循环(len(a),len(b))。我将把它留给您进一步实现这里最糟糕的时间复杂度可能是O(max(len(a),len(b))
说明:
设a='11111'和b='11'
while循环将迭代,直到列表a和列表b都为空且进位等于0,在我们的示例中,第二次迭代后,列表b将为空,但while循环仍将继续,直到列表a变为空,进行len(max(a,b))次,即len(a)=8次迭代,即使在这之后,它将再迭代一次以添加进位(虽然可能已从循环中移出)
这个解决方案可以是即兴的。提示:将while条件更改为最小循环(len(a),len(b))。我将留待您进一步实现O(max(len(a),len(b))与O(len(a)+len(b))相同,我想。无论哪种方式,它都是线性的。O(max(len(a),len(b))与O(len(a)+len(b))相同我想。不管怎样,它都是线性的。我被否决了。我知道我只是想知道我的问题是不是不好?比如内容不好还是我问的方式?我不确定,但我猜它有一个“家庭作业”味道。如果你添加上下文可能会有所帮助,例如,解释你在复杂度计算中遇到的困难。哦,我刚开始使用stackoverflow,我对它不太了解。但我只想知道时间复杂度,这与家庭作业无关。就像我说的,我在leetcode上解决了它。但我不知道大OI被否决了。我知道我只是想知道我的问题是不是不好?比如内容不好还是我问的方式不好?我不确定,但我猜是有“家庭作业”味道。如果你添加上下文可能会有所帮助,例如,解释你在复杂度计算中遇到的困难。哦,我刚开始使用stackoverflow,我真的不太了解它。但我只想知道时间复杂度,它与家庭作业无关。就像我说的,我在leetcode上解决了它。但我只是不知道大的O