本文共 1161 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到书店老板营业期间最多有多少客户能够感到满意。满意客户数包括两部分:一部分是不生气的时间的顾客数量,另一部分是在某个连续X分钟窗口内被赶走的顾客数量。
问题分析:
关键思路:
算法选择:
from typing import Listclass Solution: def maxSatisfied(self, customers: List[int], grumpy: List[int], X: int) -> int: n = len(customers) sum1 = 0 for i in range(n): if grumpy[i] == 0: sum1 += customers[i] if X == 0: return sum1 current = 0 for i in range(X): current += customers[i] * grumpy[i] max_sum2 = current for i in range(X, n): current += customers[i] * grumpy[i] - customers[i - X] * grumpy[i - X] if current > max_sum2: max_sum2 = current return sum1 + max_sum2
初始化:
sum1
计算所有不生气的顾客数量。current
用于滑动窗口中当前窗口内生气的顾客数量总和。滑动窗口:
返回结果:
通过这种方法,我们可以在O(n)时间复杂度内解决问题,适用于大数据量。
转载地址:http://kvog.baihongyu.com/