String.toCharArray() 的时间复杂度是 O(n) 还是 O(1)?

6
假设您想将长度为n的字符串转换为长度为n的字符数组。
char [] chArray = someString.toCharArray();

什么是计算复杂度?O(n)还是O(1)(n:someString的长度)

我认为它所做的只是分配大小为n*sizeof(char)的内存,并将该字符串的副本复制到该位置。因此,复制n个单元格的内存需要O(n)时间。是这样吗?

或者它可能是O(1),(简单的指针重定位或如这里所述)?


你可以查看源代码...或者阅读Javadoc。 - Sotirios Delimanolis
System.arrayCopy() 在 O(N) 上运行。 - jmj
@JigarJoshi 为什么不把它发布为答案呢? - C graphics
https://dev59.com/WGw05IYBdhLWcg3wkik- - jmj
2个回答

7
答案是线性时间。将其视为复制单个字符并将其放入数组中。它取决于元素数量,因此是O(n)。

尽管n=0到n=512的复制可能具有相同的持续时间,并且可能以某个较大的常量值递增。 - Charlie
1
这意味着一个低的常数因子,而不是实际渐近性的变化。 - Louis Wasserman

1

这是线性时间;它执行复制操作,而复制需要线性时间。(常数因子可能非常低,但总体上仍然是线性的。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接