Java 为什么此代码的运行时间为0(n^2)
为什么这段代码的运行时间是O(n^2)。(如破解编码访谈书中所述)。以及如何改进它Java 为什么此代码的运行时间为0(n^2),java,Java,为什么这段代码的运行时间是O(n^2)。(如破解编码访谈书中所述)。以及如何改进它 public String makeSentence(String[] words) { StringBuffer sentence = new StringBuffer(); for (String w : words) sentence.append(w); return sentence.toString(); } 要查看的关键行是(stringw:words)句子的 在Java中
public String makeSentence(String[] words) {
StringBuffer sentence = new StringBuffer();
for (String w : words) sentence.append(w);
return sentence.toString();
}
要查看的关键行是(stringw:words)句子的
代码>
在Java中,字符串追加是一种O(n)操作。因为append在for
循环中,所以方法作为一个整体是O(n^2)。forn
=数组中的元素数
for
循环表示至少O(n)
在for
循环中,语句.append(w)
的每个实例都应该是“常量”,因为语句
是一个字符串缓冲区
连续做n次
意味着你总共得到了O(n)
的拷贝,我想这是O(n),其中n是单词中的字符总数
。这是一个明显的重复。除了StringBuffer,所以这个答案是错误的。你在两个不同的n:-)@Pimgd上行走——很好,StringBuffer,所以它不是O(n^2)。在链接副本中查看正确答案。是的,我本能地回答了,但已经编辑过了。