We first calculate the customers satisfied regardless of the technique. Then we use a sliding window of size minutes to find which interval, if satisfied, adds the maximum "bonus" customers.
satisfied = sum(customers[i] for i in if grumpy[i] == 0).- Initial
bonus = sum(customers[i] for i in range(minutes) if grumpy[i] == 1). max_bonus = bonus.- Slide the window from
minuteston-1:- If
grumpy[r] == 1,bonus += customers[r]. - If
grumpy[l] == 1,bonus -= customers[l]. - Update
max_bonus.
- If
- Return
satisfied + max_bonus.
- Time Complexity: O(N).
- Space Complexity: O(1).
def max_satisfied(customers, grumpy, minutes):
satisfied = 0
for i in range(len(customers)):
if grumpy[i] == 0:
satisfied += customers[i]
bonus = 0
for i in range(minutes):
if grumpy[i] == 1:
bonus += customers[i]
max_bonus = bonus
for i in range(minutes, len(customers)):
if grumpy[i] == 1:
bonus += customers[i]
if grumpy[i - minutes] == 1:
bonus -= customers[i - minutes]
max_bonus = max(max_bonus, bonus)
return satisfied + max_bonus