## Algorithm

Problem Name: 1052. Grumpy Bookstore Owner

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 = , grumpy = , 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`.

## Code Examples

### #1 Code Example with Java Programming

```Code - Java Programming```

``````
class Solution {
public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
int totalSum = 0;
int maxDiff = 0;
int grumpySum = 0;
for (int i = 0; i < customers.length; i++) {
totalSum += grumpy[i] == 1 ? 0 : customers[i];
grumpySum += grumpy[i] == 1 ? customers[i] : 0;
if (i >= minutes) {
grumpySum -= grumpy[i - minutes] == 1 ? customers[i - minutes] : 0;
}
maxDiff = Math.max(maxDiff, grumpySum);
}
}
}
``````
Copy The Code &

Input

cmd
customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3

Output

cmd
16

### #2 Code Example with Javascript Programming

```Code - Javascript Programming```

``````
const maxSatisfied = function(customers, grumpy, X) {
if (customers.length === 1) return customers
const totalSatisfiedCustomers = customers.reduce(
(ac, el, idx) => ac + (grumpy[idx] === 0 ? el : 0),
0
)
const arr = customers.map((el, idx) => (grumpy[idx] === 1 ? el : 0))
const acArr = []
let ac = 0
for (let i = 0, len = arr.length; i < len; i++) {
acArr[i] = ac = ac + arr[i]
}
let max = 0
for (let i = X - 1, len = grumpy.length; i < len; i++) {
let tmp = i - X < 0 ? 0 : acArr[i - X]
if (acArr[i] - tmp > max) max = acArr[i] - tmp
}

}
``````
Copy The Code &

Input

cmd
customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3

Output

cmd
16

### #3 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def maxSatisfied(self, customers: List[int], grumpy: List[int], x: int) -> int:
dif = mx = sum(c * g for c, g in zip(customers[:x], grumpy[:x]))
for j in range(x, len(grumpy)):
dif += (grumpy[j] * customers[j]) - (grumpy[j - x] * customers[j - x])
mx = max(mx, dif)
return mx + sum(c * (1- g) for c, g in zip(customers, grumpy))
``````
Copy The Code &

Input

cmd
customers = , grumpy = , minutes = 1

Output

cmd
1