我对时间的复杂性足够舒服,但还没有空间复杂性。我有关于空间复杂性的以下问题:
unordered_set<int> s;
for(auto& i : nums)
s.insert(i);
根据我的理解,上面代码段的空间复杂度为O(n)
(n
是输入向量nums
中的元素数),因为我创建了外部的集合for循环并插入其中的最大n
个元素。
但是,如果我在for循环中创建了一个集合,如:
for(auto& i : nums) {
unordered_set<int> s;
s.insert(i);
}
那么在这种情况下,我的空间复杂度会再次为O(n)
吗?我明白我在做什么是不同的(每次创建一个新的集合并且只插入一个元素),但我只是对空间复杂性感到好奇。
简而言之,空间复杂性是仅取决于数据结构中插入了多少元素,还取决于使用了多少数据结构(如在循环中创建它们)。
感谢。
答案 0 :(得分:3)
空间复杂度会告诉您算法使用了多少内存。
在第二种情况下,您只需将一个元素插入[PAR]
。在s
超出范围之后,您开始新的迭代。这意味着您实际上一次只使用一个内存单元。内存使用量不会随s
而增加。因此,你有n
。