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),总的时间复杂度是多少?
答案 0 :(得分:0)
如果您致电n = |单词|并且m = maxWidth,那么您会注意到,您有一个执行n次迭代的外部循环,其中内部存在不同的条件,但是如果它们恰好是真实的,则存在另一个循环,该循环在最坏的情况下执行了m次。
因此,您可以说时间复杂度为: T(n,m)= O(n * m)