【问题标题】:why running time of this code is 0(n^2) [duplicate]为什么此代码的运行时间为 0(n^2) [重复]
【发布时间】:2014-10-15 13:13:53
【问题描述】:

为什么这段代码的运行时间是O(n^2)。(在破解编码面试书中写的)。以及如何改进它

public String makeSentence(String[] words) {
    StringBuffer sentence = new StringBuffer();
    for (String w : words) sentence.append(w);
    return sentence.toString();
}

【问题讨论】:

标签: java


【解决方案1】:

对于n = words 数组中的元素数

for 循环至少意味着O(n)

for 循环内,sentence.append(w) 的每个实例都应该是“常量”,因为sentenceStringBuffer

做不变的事情n次意味着你总共得到O(n)

【讨论】:

  • 再说一次,StringBuffer,所以不是 O(n^2)。请参阅链接副本中的正确答案。
  • 是的,我本能地回答,但已经编辑过了。
【解决方案2】:

要查看的关键行是for (String w : words) sentence.append(w);

在 Java 中,字符串追加是 O(n) 操作。因为 append 在 for 循环内,所以整个方法是 O(n^2)。

【讨论】:

  • StringBuffer除外,所以这个答案是错误的。
  • 你走在两个不同的n :-)
  • @Pimgd -- 好点
猜你喜欢
  • 1970-01-01
  • 2018-12-12
  • 2016-10-27
  • 2018-03-19
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
相关资源
最近更新 更多