package main func maxSatisfied(customers []int, grumpy []int, minutes int) int { // count always satisfied customers satisfied := 0 for i, count := range customers { satisfied += count * (1 - grumpy[i]) } // get the initial run unsatisfied := 0 for i := 0; i < minutes; i++ { unsatisfied += customers[i] * grumpy[i] } maxCoverage := unsatisfied for i := minutes; i < len(customers); i++ { // remove from the start unsatisfied -= customers[i-minutes] * grumpy[i-minutes] // add from the end unsatisfied += customers[i] * grumpy[i] // update max coverage maxCoverage = max(maxCoverage, unsatisfied) } return maxCoverage + satisfied }