首页 > 其他 > 详细

leetcode1052

时间:2019-05-26 16:37:06      阅读:146      评论:0      收藏:0      [点我收藏+]
 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行。

leetcode1052

原文:https://www.cnblogs.com/asenyang/p/10926422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!