def maxSatisfied(customers, grumpy, minutes): """ :type customers: List[int] :type grumpy: List[int] :type minutes: int :rtype: int """ # Sliding Window Approach i = 0 j = 0 sum_unsatisfied = 0 max_sum = float('-inf') # Using sliding window while j < len(grumpy): if grumpy[j] == 1: # Calculation part sum_unsatisfied += customers[j] if j - i + 1 < minutes: j += 1 elif j - i + 1 == minutes: max_sum = max(max_sum, sum_unsatisfied) if grumpy[i] == 1: # Removing calculation part using i sum_unsatisfied -= customers[i] i += 1 # Sliding the window j += 1 for k in range(len(customers)): # Now finding only satisfied customers (grumpy[k] == 0) if grumpy[k] == 0: max_sum += customers[k] return max_sum maxSatisfied([1,0,1,2,1,1,7,5], [0,1,0,1,0,1,0,1], 3)