请教:这段创建字符数组代码的空间复杂度是O(1)还是O(n)?
这段代码的空间复杂度分析
你的问题核心是搞清楚空间复杂度的判断逻辑——空间复杂度衡量的是代码执行时额外占用的空间随输入规模增长的变化趋势,这里的输入规模就是传入字符串str的长度n。
针对你给出的代码:
char[] arr = new char[str.length()];
这段代码的空间复杂度是O(n),原因很简单:
- 你创建的char数组的长度完全依赖于输入字符串
str的长度n,数组占用的空间和n成线性正比关系——输入字符串越长,数组占用的内存就越多。 - 所谓“字符串长度在方法外已确定”不影响复杂度判断,因为空间复杂度关注的是空间占用和输入规模的关联,不管输入是在方法内还是外部生成的,只要空间随输入规模线性增长,就属于O(n)级别的空间复杂度。
对比一下:如果是创建固定大小的数组,比如new char[10],不管输入字符串多长,占用的空间都不变,那才是O(1)(常数空间)。
内容的提问来源于stack exchange,提问作者Sam Sagarin
相关产品推荐
相关产品推荐

