LeetCode-703. Kth maior elemento em um fluxo [Kth maior elemento em um fluxo] -Análise e código [Java]
1. Tópico
Projete uma classe que encontre o k-ésimo maior elemento no fluxo de dados. Observe que é o k-ésimo maior elemento após a classificação, não o k-ésimo elemento diferente.
Implemente a classe KthLargest:
- KthLargest (int k, int [] nums) inicializa o objeto usando números inteiros k e números inteiros de fluxo.
- int add (int val) Depois de inserir val no fluxo de dados nums, retorne o k-ésimo maior elemento no fluxo de dados atual.
Exemplo:
输入:
["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
incitar:
- 1 <= k <= 104
- 0 <= nums.length <= 104
- -104 <= nums [i] <= 104
- -104 <= val <= 104
- O método add pode ser chamado até 104 vezes
- Os dados do título garantem que ao procurar o maior elemento k, existem pelo menos k elementos na matriz
Fonte: LeetCode (LeetCode)
Link: https://leetcode-cn.com/problems/kth-largest-element-in-a-stream Os
direitos autorais são propriedade da LeetCode . Para reimpressões comerciais, favor contatar a autorização oficial Para reimpressões não comerciais, favor indicar a fonte.
Dois, análise e código
1. Heap (fila de prioridade)
(1) Pensando
Projete um pequeno heap superior (fila de prioridade), insira os dados em sequência, quando o número de elementos nele for maior que k, o menor elemento será exibido. Neste momento, o topo da pilha é o maior elemento k-th.
(2) Código
class KthLargest {
int k;
PriorityQueue<Integer> pq;
public KthLargest(int k, int[] nums) {
this.k = k;
pq = new PriorityQueue<>();
for (int num : nums)
add(num);
}
public int add(int val) {
pq.offer(val);
if (pq.size() > k)
pq.poll();
return pq.peek();
}
}
(3. Resultados
Tempo de execução: 18 ms, superando 88,31% dos usuários
em todos os envios Java ; consumo de memória: 43,7 MB, superando 61,50% dos usuários em todos os envios Java.
Tres, outro
Nenhuma coisa.