Propriétaire de librairie maxSatisfied-Angry

Titre

Aujourd'hui, le propriétaire de la librairie a une boutique qui a l'intention de démarrer des essais clients de quelques minutes. Chaque minute, certains clients (clients [i]) entreront dans la librairie, et tous ces clients
partiront une fois cette minute écoulée.

À un moment donné, le propriétaire de la librairie sera en colère. Si le propriétaire de la librairie est en colère à la i-ème minute, alors grincheux [i] = 1, sinon grincheux [i] = 0. Lorsque le propriétaire de la librairie est en colère,
les clients à cette minute seront insatisfaits, et s'ils ne sont pas en colère, ils seront satisfaits.

Le propriétaire de la librairie connaît une technique secrète qui peut supprimer ses émotions et s'empêcher de se mettre en colère pendant X minutes, mais il ne peut l'utiliser qu'une seule fois.

Veuillez revenir à ce jour ouvrable, le nombre maximum de clients pouvant être satisfaits.

Exemple:

Entrée: clients = [1,0,1,2,1,1,7,5], grincheux = [0,1,0,1,0,1,0,1], X = 3
Sortie: 16
Explication:
Le propriétaire de la librairie est resté calme pendant les 3 dernières minutes.
Le nombre maximum de clients satisfaits = 1 + 1 + 1 + 1 + 7 + 5 = 16.

rapide:

1 <= X <= customers.length == grumpy.length <= 20000
0 <= clients [i] <= 1000
0 <= grincheux [i] <= 1

Rubriques connexes Fenêtre coulissante de matrice

Idées de résolution de problèmes

Le code correspondant contient des instructions et vous connaîtrez en un coup d’œil les intentions de l’auteur.

Démo de code

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;
    }
}

effet

La
réponse info a réussi:
temps d'exécution: 3 ms, battant 79,44% des utilisateurs Java
Consommation de mémoire: 41,3 Mo, battant 5,11% des utilisateurs Java

Je suppose que tu aimes

Origine blog.csdn.net/tangshuai96/article/details/113993926
conseillé
Classement