我的代码的空间复杂性是多少?

时间:2017-11-27 15:09:02

标签: c++ algorithm space-complexity

我对时间的复杂性足够舒服,但还没有空间复杂性。我有关于空间复杂性的以下问题:

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)吗?我明白我在做什么是不同的(每次创建一个新的集合并且只插入一个元素),但我只是对空间复杂性感到好奇。

简而言之,空间复杂性是仅取决于数据结构中插入了多少元素,还取决于使用了多少数据结构(如在循环中创建它们)。

感谢。

1 个答案:

答案 0 :(得分:3)

空间复杂度会告诉您算法使用了多少内存。

在第二种情况下,您只需将一个元素插入[PAR]。在s超出范围之后,您开始新的迭代。这意味着您实际上一次只使用一个内存单元。内存使用量不会随s而增加。因此,你有n