leetcode1052

 1 class Solution:
 2     def maxSatisfied(self, customers: 'List[int]', grumpy: 'List[int]', X: int) -> int:
 3         n = len(customers)
 4         presum = 0
 5         j = 0
 6         for i in range(n):
 7             if grumpy[i] == 0:
 8                 presum += customers[i]
 9                 j += 1
10             elif j < X:
11                 presum += customers[i]
12                 j += 1
13 
14         maxsati = presum
15         for i in range(0,n-X):
16             if grumpy[i] == 1:
17                 presum -= customers[i]
18             if grumpy[i+X] == 1:
19                 presum += customers[i+X]
20             maxsati = max(presum,maxsati)
21 
22         return maxsati

本题的思路是滑动窗口,在区间i到i+X之间,假设全部都处于平静状态,将客人的满意度都加在一起。

然后窗口向右滑动,最左侧的离开窗口,最右侧的新进入窗口,根据其原始状态,判断是进行加还是减。

具体的判断逻辑在代码的15~20行。

转载于:https://www.cnblogs.com/asenyang/p/10926422.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值