Voici un exemple de solution pour le problème Sliding Window Maximum en Java.Quelle est la complexité temporelle de cette fonction?
Compte tenu d'une nums de réseau, il y a une fenêtre glissante de taille k qui est passer de l'extrême gauche de la rangée à l'extrême droite. Vous pouvez seulement voir les k numéros dans la fenêtre. Chaque fois que la fenêtre coulissante se déplace à droite d'une position.
Je souhaite connaître la complexité temporelle et spatiale de cette fonction. Voici ce que je pense, serait la réponse:
Heure: O((n-k)(k * logk))
== O(nklogk)
Espace (auxiliaire): O(n)
pour le retour int[]
et O(k)
pour pq
. Total de O(n)
.
Est-ce correct?
private static int[] maxSlidingWindow(int[] a, int k) {
if(a == null || a.length == 0) return new int[] {};
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(k, new Comparator<Integer>() {
// max heap
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
int[] result = new int[a.length - k + 1];
int count = 0;
// time: n - k times
for (int i = 0; i < a.length - k + 1; i++) {
for (int j = i; j < i + k; j++) {
// time k*logk (the part I'm not sure about)
pq.offer(a[j]);
}
// logk
result[count] = pq.poll();
count = count + 1;
pq.clear();
}
return result;
}
Est-ce que 'k' est vraiment une constante? – Boggartfly
Si k n'est pas une constante, comment pouvez-vous l'éliminer de l'équation 'O ((n-k) (k * logk))'? – Boggartfly