以下方法的费用是多少?你怎么计算它?
public String joinWords(String[] words) {
String sentence = "";
for (String w : words) {
sentence = sentence + word;
}
return sentence;
}
答案 0 :(得分:3)
运行时为O(mn),其中n是输入字符串中的字符总数,m是输入字符串的数量。
要看到这一点,请记住在Java中,字符串连接在时间O(r + s)中运行,其中r和s是连接在一起的字符串的长度。因此,如果字符串长度为n1,n2,...,n_m,则运行时将为
n1 +(n1 + n2)+(n1 + n2 + n3)+ ... +(n1 + n2 + ... + n_m)
= m(n_1)+(m - 1)(n_2)+(m - 2)(n-3)+ ... + n_m
= m(n_1 + n_2 + ... + n_m) - n_2 - 2n_3 - 3n_4 - ... - (m - 1)n_m
受n_1 + ... + n_m = n的约束,当n_1 = n并且所有其他值都为0时,这是最大化的。在这种情况下,运行时变为mn,因此运行时为O(mn)
希望这有帮助!