All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1001_1100.s1052_grumpy_bookstore_owner.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1001_1100.s1052_grumpy_bookstore_owner;

// #Medium #Array #Sliding_Window #2022_02_28_Time_4_ms_(70.26%)_Space_54.4_MB_(27.35%)

/**
 * 1052 - Grumpy Bookstore Owner\.
 *
 * Medium
 *
 * There is a bookstore owner that has a store open for `n` minutes. Every minute, some number of customers enter the store. You are given an integer array `customers` of length `n` where `customers[i]` is the number of the customer that enters the store at the start of the ith minute and all those customers leave after the end of that minute.
 *
 * On some minutes, the bookstore owner is grumpy. You are given a binary array grumpy where `grumpy[i]` is `1` if the bookstore owner is grumpy during the ith minute, and is `0` otherwise.
 *
 * When the bookstore owner is grumpy, the customers of that minute are not satisfied, otherwise, they are satisfied.
 *
 * The bookstore owner knows a secret technique to keep themselves not grumpy for `minutes` consecutive minutes, but can only use it once.
 *
 * Return _the maximum number of customers that can be satisfied throughout the day_.
 *
 * **Example 1:**
 *
 * **Input:** customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3
 *
 * **Output:** 16
 *
 * **Explanation:** The bookstore owner keeps themselves not grumpy for the last 3 minutes.
 *
 * The maximum number of customers that can be satisfied = 1 + 1 + 1 + 1 + 7 + 5 = 16.
 *
 * **Example 2:**
 *
 * **Input:** customers = [1], grumpy = [0], minutes = 1
 *
 * **Output:** 1
 *
 * **Constraints:**
 *
 * *   `n == customers.length == grumpy.length`
 * *   1 <= minutes <= n <= 2 * 104
 * *   `0 <= customers[i] <= 1000`
 * *   `grumpy[i]` is either `0` or `1`.
**/
public class Solution {
    public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
        // storing numbers of customers who faced grumpy owner till ith minute.
        int[] grumpySum = new int[grumpy.length];
        int ans = 0;
        if (grumpy[0] == 1) {
            grumpySum[0] = customers[0];
        } else {
            ans += customers[0];
        }
        for (int i = 1; i < grumpy.length; i++) {
            if (grumpy[i] == 1) {
                grumpySum[i] = grumpySum[i - 1] + customers[i];
            } else {
                grumpySum[i] = grumpySum[i - 1];
                ans += customers[i];
            }
        }
        // calculating max number of customers who faced grumpy owner in a window of size 'minutes'.
        int max = 0;
        for (int i = 0; i <= customers.length - minutes; i++) {
            if (i == 0) {
                max = Math.max(max, grumpySum[i + minutes - 1]);
            } else {
                max = Math.max(max, grumpySum[i + minutes - 1] - grumpySum[i - 1]);
            }
        }
        // making the owner non-grumpy in that max window and adding the number of customers who do
        // not face the grumpy customers.
        ans += max;
        return ans;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy