LeetCode-703. Kth elemento más grande en un análisis de flujo y código (Java)

LeetCode-703. Kth elemento más grande en una secuencia [Kth elemento más grande en una secuencia] -Análisis y código [Java]

1. Tema

Diseñe una clase que encuentre el k-ésimo elemento más grande en el flujo de datos. Tenga en cuenta que es el k-ésimo elemento más grande después de la clasificación, no el k-ésimo elemento diferente.

Implemente la clase KthLargest:

  • KthLargest (int k, int [] nums) inicializa el objeto usando números enteros k y números enteros de flujo.
  • int add (int val) Después de insertar val en el flujo de datos nums, devuelve el k-ésimo elemento más grande en el flujo de datos actual.

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

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/kth-largest-element-in-a-stream Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Dos, análisis y código

1. Heap (cola de prioridad)

(1) Pensando

Diseñe un montón superior pequeño (cola de prioridad), inserte datos en secuencia, cuando el número de elementos en él sea mayor que k, aparecerá el elemento más pequeño. En este momento, la parte superior del montón es el k-ésimo elemento más grande.

(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

Tiempo de ejecución: 18 ms, superando al 88,31% de los usuarios
en todas las presentaciones de Java ; consumo de memoria: 43,7 MB, superando al 61,50% de los usuarios en todas las presentaciones de Java.

Tres, otro

Nada.

Supongo que te gusta

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