【问题标题】:how to check the space complexity of our code is O(1) or not如何检查我们代码的空间复杂度是否为 O(1)
【发布时间】:2021-06-19 05:37:09
【问题描述】:

在问题中,据说我们需要以 O(1) 空间复杂度编写代码,我看它感到困惑。有人可以解释这段代码的空间复杂度。如果它不在 O(1) 中,有什么办法可以改变它?

python3

from collections import Counter
def duplicates(arr, n): 
    r=[]
    dic=Counter(arr)
    for i in dic:
        if dic[i]>1:
            r.append(i)
    if r:
        r.sort()
        return r
    else:
        r.append(-1)
        return r

【问题讨论】:

  • 在不知道您要解决的问题的情况下,我无法回答如何优化空间。
  • 问题是打印数组中重复的元素
  • CS Stackexchange 是提出这些问题的更好地方
  • @anirudh 我想说这实际上更适合 SO。
  • @anirudh 感谢您推荐 CS Stackexchange

标签: python-3.x space-complexity


【解决方案1】:

空间复杂度是渐近地使用了多少空间(当 N 变得非常大时)

O(1) 空间复杂度通常由具有恒定大小的变量和数组组成。

您的代码是 O(N) 空间复杂度,因为数组 r 会随着 N 的大小而增长。

【讨论】:

  • 所以如果我不使用列表'r'空间复杂度变成O(1)?
  • 你的意思是 O(1)?在您的代码中,是的,但您也不能使用任何具有非常量大小的数组/字典。
【解决方案2】:

好吧,如果您不使用额外的数据结构,例如除了问题中的数组之外的数组,那么您的空间复杂度是恒定的 O(1),否则可能不是。

问题是您是否引入了任何额外的集合数组来保存您的数据或结果?如果不是,则在常数空间O(1)中求解,如果是,则不是常数空间。

你必须根据你引入的额外数组来计算空间复杂度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多