这里,“ n”和“ k”分别是输入数组的大小和数组的最大元素。
由于大小为'n'的数组中有一个运行用于元素频率的计数,因此大小为'k'的数组中有单独的运行以及该数组中的每个遍历(或迭代),因此是count [i]个迭代,其中“ count”是大小为“ k”的数组。
与空间复杂度相同。
我正在寻找一个很好的解释来解释概念的每一个细节,因为您可能会猜到我感到非常困惑。
答案 0 :(得分:0)
实际上,在数组k
上有两次运行
k
表示数组的大小。 O表示法中的“ k”实际上代表最大元素。
如果我们写O(max(n,k)),它将隐藏算法的细节,这在很大程度上取决于最大元素
答案 1 :(得分:0)
感谢所有回应的人。但是,我想我明白了。
假设:
N
的实际数组为A[]
A[]
中的最大元素为K
K
的元素频率的数组为count[]
N
的已排序元素的辅助数组为sorted[]
我以这种方式看待它,A[]
中有一个运行用于获取最大元素,另一个运行以存储每个元素的频率。
这需要O(N)
。
现在,在count[]
中有一个运行,对于每次迭代,都有一个count[i]
次循环,用于以sorted[]
的排序顺序插入数组元素。
count[]
中所有元素的总和不能大于N
。因此,这些操作的总时间为O(N + K)
因此,最坏情况下的时间复杂度为O(N + K)
。如果我在某个地方错了,请纠正我。
答案 2 :(得分:0)
请注意O(n+k) = O(max(n, k))
,因为
max(n,k) <= n+k <= 2max(n,k)
并且big-O看不到常量2
。