LeetCode-1052. Grumpy Bookstore Owner [Medium] -Análisis y código (Java)

LeetCode-1052. Propietario de librería enojado [Propietario de librería gruñón] [Medio] -Análisis y código [Java]

1. Tema

Hoy en día, el dueño de la librería tiene una tienda que pretende abrir a los clientes minutos de duración en prueba. Cada minuto, algunos clientes (clientes [i]) entrarán a la librería, y todos estos clientes se irán después de que termine ese minuto.
En algún momento, el dueño de la librería se enojará. Si el dueño de la librería está enojado en el minuto i, entonces gruñón [i] = 1, de lo contrario gruñón [i] = 0. Cuando el dueño de la librería está enojado, los clientes en ese momento estarán insatisfechos, y si no están enojados, estarán satisfechos.
El dueño de la librería conoce una técnica secreta que puede reprimir sus emociones y evitar enojarse durante X minutos, pero solo puede usarla una vez.
Regrese a este día hábil, el número máximo de clientes que pueden estar satisfechos.

Ejemplo:

输入:customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], X = 3
输出:16
解释:
书店老板在最后 3 分钟保持冷静。
感到满意的最大客户数量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.

inmediato:

  • 1 <= X <= clientes.longitud == gruñón.longitud <= 20000
  • 0 <= clientes [i] <= 1000
  • 0 <= gruñón [i] <= 1

Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/grumpy-bookstore-owner 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. Ventana corredera

(1) Pensando

Por un lado, cuando el dueño de la librería no está enojado, determine el número de clientes satisfechos; por otro lado, diseñe una ventana deslizante con una longitud de X. En la ventana de estadísticas, el número máximo de clientes insatisfechos causado por la librería la ira del propietario es la suma de los dos.

(2) Código

class Solution {
    
    
    public int maxSatisfied(int[] customers, int[] grumpy, int X) {
    
    
        int n = customers.length, custNum = 0, dec = 0; 
        for (int i = 0; i < X; i++) {
    
         
            if (grumpy[i] == 1)
                dec += customers[i];
            else
                custNum += customers[i];//统计顾客满意数
        }
        int decMax = dec;//减小的最大损失
        for (int i = X; i < n; i++) {
    
    
            if (grumpy[i - X] == 1)//移出窗口的不满意顾客数
                dec -= customers[i - X];
            if (grumpy[i] == 1)
                dec += customers[i];//移入窗口的不满意顾客数
            else
                custNum += customers[i];//继续统计顾客满意数
            decMax = Math.max(decMax, dec);
        }
        return custNum + decMax;
    }
}

(3) Resultados

Tiempo de ejecución: 4 ms, superando al 39,80% de los usuarios
en todas las presentaciones de Java ; consumo de memoria: 40,7 MB, superando al 87,15% de los usuarios en todas las presentaciones de Java.

Tres, otro

Nada.

Supongo que te gusta

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