我已经知道,最坏情况的复杂度是N,而最坏情况的复杂度是Mlog(M),但我只是不知道如何。谁能向我解释为什么会这样,每种情况会导致什么不同的输入?
public static Iterable<Integer> topM(int[] a, int M){
int N = a.length;
MinPQ<Integer> pq = new MinPQ<Integer>(M+1);
for(int i = 0; i < N; i++){
if(pq.size() < M)
pq.insert(a[i]);
if(pq.min() <= a[i]){
pq.insert(a[i]);
pq.delMin();
}
}
return pq;
}
答案 0 :(得分:0)
复杂度为O(Nlog(M))
。最坏的情况是当数组以升序排序时,在这种情况下,每个元素都插入到队列中。
最好的情况是当数组以降序排序时,在这种情况下,仅插入前M个元素。最佳情况下的复杂度为O(N+Mlog(M))
。
ps。第一个评论正确,第二个if
应该是else if
。