zoukankan      html  css  js  c++  java
  • Leetcode1052. 爱生气的书店老板

    1052. 爱生气的书店老板

    Difficulty: 中等

    今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。

    在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。

    书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。

    请你返回这一天营业下来,最多有多少客户能够感到满意的数量。

    示例:

    输入: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.
    

    提示:

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

    Solution

    思路:先计算在不生气时的客人满意数,然后设置一个长度为X的窗口,代表老板在这个窗口时间内不会生气,开始滑动窗口,当进入窗口的grumpy [i]为1时,因为老板忍耐生气,所以客人是满意的,当滑出窗口时,客人需要变为不满意的状态。

    Language: java

    ​class Solution {
        public int maxSatisfied(int[] customers, int[] grumpy, int X) {
            int sum = 0, len=customers.length;
            for(int i=0; i<len; i++){
                sum += (1 - grumpy[i]) * customers[i];  //计算不生气时满意的人数
            }
            int max = 0, window = 0;  //window记录窗口内新增加的满意人数
            for(int left=0, right=0; right<len; right++){
                window += grumpy[right] * customers[right];
                if(right - left + 1 > X){
                    window -= grumpy[left] * customers[left];
                    left ++;
                }
                max = Math.max(max, sum + window);
            }
            return max;
        }
    }
    
  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/liuyongyu/p/14435464.html
Copyright © 2011-2022 走看看