703. El Kth elemento más grande en el flujo de datos
Diseño del primer flujo de datos para encontrar una k
clase de elementos grandes (clase). Tenga en cuenta que después de la ordenación de k
los elementos principales, no son los primeros k
elementos diferentes.
Por favor, tenga en cuenta las KthLargest
categorías:
KthLargest(int k, int[] nums)
El k
flujo de enteros y enteros nums
inicializa el objeto.
int add(int val)
El val
flujo de datos de inserción nums
, el flujo de corriente de retorno del primer k
elemento grande.
Ejemplo:
输入:
["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
inmediato:
- 1 <= k <= 104
- 0 <= núm. De longitud <= 104
- -104 <= números [i] <= 104
- -104 <= val <= 104
- El método add se puede llamar hasta 104 veces
- Los datos del título garantizan que al buscar el k-ésimo elemento más grande, hay al menos k elementos en la matriz
Método 1: cola de prioridad
Ideas para resolver problemas
Las ideas no son importantes, ¡les deseo a todos un feliz año nuevo! !
Código de referencia
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();
}
}
Resultados de la