LeetCode-703. Kth o maior elemento em uma análise e código de fluxo (Java)

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.

Acho que você gosta

Origin blog.csdn.net/zml66666/article/details/113853627
Recomendado
Clasificación