分析以下代码的时间和空间复杂度

时间:2018-09-10 11:10:06

标签: python python-3.x time-complexity

leetcode中的问题:

  

https://leetcode.com/problems/text-justification/description/

     

给出一个单词数组和一个宽度maxWidth,设置文本格式,使每行都具有完全maxWidth字符,并且完全(左右)对齐。

     

您应该用一种贪婪的方式包装自己的话;也就是说,在每一行中尽可能多地打包单词。必要时请添加多余的空格'',以使每行都具有完全maxWidth个字符。

     

单词之间的多余空格应尽可能均匀地分布。如果一行中的空格数量在单词之间分配不均,则左侧的空白位置将比右侧的空白位置分配更多的空间。

     

对于文本的最后一行,应将其对齐,并且单词之间不应插入多余的空格。

原始代码:

   class Solution:
        def fullJustify(self, words, maxWidth):
            ans, curr, word_length = [], [], 0
            words.append(' ' * maxWidth)
            for w in words:
                if word_length + len(w) + len(curr) > maxWidth:
                    space = maxWidth-word_length 
                    if w != words[-1]:
                        for i in range(space):
                            curr[i%(len(curr)-1 or 1)] += ' '
                        ans.append(''.join(curr))
                    else:
                        ans.append(' '.join(curr) + ' ' * (space - (len(curr) - 1)))
                    curr = []
                    word_length = 0
                curr += [w]
                word_length += len(w)            

            return ans

因此,有2个for循环,一个在另一个内部。 第二个for循环由每次更改但始终小于“ maxWidth”的空间确定。第一个循环的时间复杂度为O(n),总的时间复杂度是多少?

1 个答案:

答案 0 :(得分:0)

如果您致电n = |单词|并且m = maxWidth,那么您会注意到,您有一个执行n次迭代的外部循环,其中内部存在不同的条件,但是如果它们恰好是真实的,则存在另一个循环,该循环在最坏的情况下执行了m次。

因此,您可以说时间复杂度为: T(n,m)= O(n * m)

相关问题