703. Kième élément le plus important du flux de données
Conception du premier flux de données pour trouver une k
classe d'éléments volumineux (classe). Notez qu'après l'ordination des k
éléments majeurs, ce ne sont pas les premiers k
éléments différents.
Veuillez réaliser les KthLargest
catégories:
KthLargest(int k, int[] nums)
Les k
flux entiers et entiers nums
initialisent l'objet.
int add(int val)
Le val
flux de données d'insertion nums
, le flux de courant de retour du premier k
grand élément.
Exemple:
输入:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
输出:
[null, 4, 5, 5, 8, 8]
解释:
KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8
rapide:
- 1 <= k <= 104
- 0 <= longueur numérique <= 104
- -104 <= nums [i] <= 104
- -104 <= val <= 104
- La méthode add peut être appelée jusqu'à 104 fois
- Les données de titre garantissent que lors de la recherche du k-ème élément le plus grand, il y a au moins k éléments dans le tableau
Méthode 1: file d'attente prioritaire
Idées de résolution de problèmes
Les idées n'ont pas d'importance, je vous souhaite à tous une bonne année! !
Code de référence
class KthLargest {
private PriorityQueue<Integer> queue;
private int k;
public KthLargest(int k, int[] nums) {
this.queue = new PriorityQueue<>();
this.k = k;
for (int val : nums) {
add(val);
}
}
public int add(int val) {
queue.offer(val);
if (queue.size() > k) {
queue.poll();
}
return queue.peek();
}
}
Résultats de la