space 复杂性字符串生成器
space complexity string builder
在下面的示例中,如果我输入 String s
,space 复杂度是 O(n) 还是 O(1)?如果我只添加元音,它仍然是 O(n) 吗?
String s = "dfgdfgdfga";
StringBuilder sb = new StringBuilder();
for (int i = 0;i <s.length(); i++) {
sb.append(s.charAt(i));
}
return sb.toString();
Space 复杂性 归结为:你需要多少 "memory" 来存储东西?
您的代码打算基本上复制 String s
的所有内容到StringBuilder sb
中。再次:将所有字符从 a
复制到 sb
.
当然可以归结为 O(n),其中 n
表示您需要 更多 内存当您复制 更多 个字符时。如果您开始进行选择,您仍然有 O(n)。
O(1) 表示:常量 要求。在谈论制作 copy.
时,这根本不可能(space 明智)
每次附加 StringBuilder
时,它会检查构建器数组是否已填充,如果需要,则将原始数组的内容复制到增加大小的新数组中。所以space要求随着String的长度线性增加。因此 space 复杂度为 O(n)
.
字母是否为元音并不重要,因为字符串生成器存储字符而不是对字符的引用。
尽管您可能对创建存储对字符对象的引用的 String Builder 的实现感兴趣,但是存储引用比字符更昂贵,而且 StringBuilder
是最终的。
在下面的示例中,如果我输入 String s
,space 复杂度是 O(n) 还是 O(1)?如果我只添加元音,它仍然是 O(n) 吗?
String s = "dfgdfgdfga";
StringBuilder sb = new StringBuilder();
for (int i = 0;i <s.length(); i++) {
sb.append(s.charAt(i));
}
return sb.toString();
Space 复杂性 归结为:你需要多少 "memory" 来存储东西?
您的代码打算基本上复制 String s
的所有内容到StringBuilder sb
中。再次:将所有字符从 a
复制到 sb
.
当然可以归结为 O(n),其中 n
表示您需要 更多 内存当您复制 更多 个字符时。如果您开始进行选择,您仍然有 O(n)。
O(1) 表示:常量 要求。在谈论制作 copy.
时,这根本不可能(space 明智)每次附加 StringBuilder
时,它会检查构建器数组是否已填充,如果需要,则将原始数组的内容复制到增加大小的新数组中。所以space要求随着String的长度线性增加。因此 space 复杂度为 O(n)
.
字母是否为元音并不重要,因为字符串生成器存储字符而不是对字符的引用。
尽管您可能对创建存储对字符对象的引用的 String Builder 的实现感兴趣,但是存储引用比字符更昂贵,而且 StringBuilder
是最终的。