leetcode 1383. Rendimiento máximo de un equipo (rendimiento máximo del equipo)

inserte la descripción de la imagen aquí

n ingenieros, matriz de velocidad y matriz de eficiencia con longitud n. Seleccione k ingenieros como máximo
cada vez y saque los k números de velocidad y eficiencia correspondientes. rendimiento=sum(k velocidad) ✖ min(k eficiencia) puede entenderse como k personas trabajan juntas, y la eficiencia se calcula de acuerdo con la persona más lenta (los demás tienen que esperar si no se puede completar un enlace). Encuentre el rendimiento máximo y el resultado es módulo 10 9 +7.


Ideas:

Similar a la pregunta 2542 ,
la diferencia es que la pregunta 2542 no necesita modificaciones, y hay k fijos, esta pregunta es un máximo de k.

Debido a que está limitado por la eficiencia mínima, los elementos de velocidad y eficiencia se emparejan y clasifican en orden descendente de eficiencia.
Luego, cada vez que se elimina la mayor eficiencia, también se reduce la dimensionalidad del problema.
Cuando la cantidad de personas seleccionadas es > k, solo necesita eliminar la velocidad más pequeña, lo que requiere el uso del montón mínimo.

Cada vez que se agrega o elimina un ingeniero, se debe actualizar la suma.

Dado que el tamaño fijo ya no es k, el rendimiento debe calcularse cada vez que se toma una combinación.

    public int maxPerformance(int n, int[] speed, int[] efficiency, int k) {
    
    
        PriorityQueue<Integer> pq = new PriorityQueue<>(k);
        long sum = 0;
        long res = 0;
        final int MOD = 1000000007;
        int[][] SEs = new int[n][2];
        for(int i = 0; i < n; i++) {
    
    
            SEs[i] = new int[]{
    
    speed[i], efficiency[i]};
        }

        Arrays.sort(SEs, (a,b)->(b[1] - a[1]));

        for(int i = 0; i < n; i++) {
    
    
            if(pq.size() >= k) sum -= pq.poll();
            sum += SEs[i][0];
            pq.offer(SEs[i][0]);
            
            res = Math.max(res, (sum * SEs[i][1]));
        }
        return (int)(res%MOD);
    }

Supongo que te gusta

Origin blog.csdn.net/level_code/article/details/130845370
Recomendado
Clasificación