1.题目解析:
题目中给出minutes,用这个去将grumpy数组中的值连续的变成0在对
customers的值进行求和,那么我们只要用滑动窗口动态记录最大值就可以了
2.何如动态记录最大值:
既然是连续的将grumpy中的1变成0,那么原本的0所对应的customers求和的值就不用变
定义一个变量sum1来记录0所对应的和,在定义一个sum2来记录在连续区间minutes中1所对应的和,在用滑动窗口来跟新sum2的值,因为sum2是动态的,那么我们在定义一个变量max_sum2来记录在整个过程中sum2的最大值,最后将0所对应的和sum1+连续区间内将1变成0所对应最大值max_sum2就是答案了
3.具体代码:
class Solution:
def maxSatisfied(self, customers: List[int], grumpy: List[int], minutes: int) -> int:
sum1,sum2=0,0
max_sum2=0
for i in range(len(grumpy)):
if grumpy[i]: # 当grumpy中的值为1时加入sum2,反之加到sum1
sum2+=customers[i]
else:
sum1+=customers[i]
if i<minutes-1: # 当滑动空间不够时,跳过
continue
max_sum2=max(max_sum2,sum2) # 更新连续的将1变成0后的和最大值
if grumpy[i-minutes+1]: # 当能够滑动的时候更新sum2的值
sum2-=customers[i-minutes+1]
return sum1+max_sum2