Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么此代码的运行时间为0(n^2)_Java - Fatal编程技术网

Java 为什么此代码的运行时间为0(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中

为什么这段代码的运行时间是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中,字符串追加是一种O(n)操作。因为append在
for
循环中,所以方法作为一个整体是O(n^2)。

for
n
=数组中的元素数

for
循环表示至少
O(n)

for
循环中,
语句.append(w)
的每个实例都应该是“常量”,因为
语句
是一个
字符串缓冲区


连续做
n次
意味着你总共得到了
O(n)

的拷贝,我想这是O(n),其中n是
单词中的字符总数
。这是一个明显的重复。除了StringBuffer,所以这个答案是错误的。你在两个不同的n:-)@Pimgd上行走——很好,StringBuffer,所以它不是O(n^2)。在链接副本中查看正确答案。是的,我本能地回答了,但已经编辑过了。