Propietario de librería maxSatisfied-Angry

Título

Hoy en día, el dueño de la librería tiene una tienda que intenta iniciar clientes de prueba. Minutos de duración. 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.

Vuelva a este día hábil, el número máximo de clientes que pueden quedar satisfechos.

Ejemplo:

Entrada: clientes = [1,0,1,2,1,1,7,5], gruñón = [0,1,0,1,0,1,0,1], X = 3
Salida: 16
Explicación:
El dueño de la librería mantuvo la calma durante los últimos 3 minutos.
El número máximo de clientes satisfechos = 1 + 1 + 1 + 1 + 7 + 5 = 16.

inmediato:

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

Temas relacionados Ventana deslizante de matriz

Ideas para resolver problemas

Hay instrucciones en el código correspondiente y conocerá las intenciones del autor de un vistazo.

Demostración de código

class Solution {
    
    
    public int maxSatisfied(int[] customers, int[] grumpy, int X) {
    
    

        //用来存放当前窗口内,老板喜笑颜开的时候,顾客满意的数量
         int sum=0;

         //记录有多长时间,存放在len变量中
         int len=customers.length;

         //用来存放当前窗口内老板生气的时候,顾客的数量
         int sum1=0;

         //记录第一个窗口内sum变量与sum1变量的值
         for(int i=0;i<X;i++)
         {
    
    
             if(grumpy[i]==0)
                 sum+=customers[i];
             else
                 sum1+=customers[i];
         }
         int maxsum1=sum1;
         //滑动窗口,基于运算
         for(int i=X;i<len;i++)
         {
    
    
             if(grumpy[i]==0)
                 sum+=customers[i];
             else
                 sum1+=customers[i];
             if(grumpy[i-X]==1)
                 sum1-=customers[i-X];
             maxsum1= sum1>maxsum1 ? sum1 : maxsum1;

         }
         return maxsum1+sum;
    }
}

efecto

La
respuesta de información fue exitosa:
tiempo de ejecución: 3 ms, superando al 79,44% de los usuarios de Java
Consumo de memoria: 41,3 MB, superando al 5,11% de los usuarios de Java

Supongo que te gusta

Origin blog.csdn.net/tangshuai96/article/details/113993926
Recomendado
Clasificación