LeetCode 1052. 爱生气的书店老板(滑动窗口)

本文介绍了一种利用滑动窗口算法解决书店老板满意度问题的方法。通过计算在特定时间段内,老板能够抑制情绪并最大化客户满意度的策略。示例中,通过调整策略,使得在给定的时间段内,最多能让16位顾客感到满意。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目

今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。

在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。

书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一次。

请你返回这一天营业下来,最多有多少客户能够感到满意的数量。

示例:
输入:customers = [1,0,1,2,1,1,7,5], 
	    grumpy = [0,1,0,1,0,1,0,1], X = 3
输出:16
解释:
书店老板在最后 3 分钟保持冷静。
感到满意的最大客户数量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.
 
提示:
1 <= X <= customers.length == grumpy.length <= 20000
0 <= customers[i] <= 1000
0 <= grumpy[i] <= 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/grumpy-bookstore-owner
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 滑动窗口 解题

class Solution {
public:
    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        int i, j, sum = 0, benefit = 0, maxSum = 0;
        for(i = 0; i < customers.size(); ++i)
        	if(grumpy[i] == 0)//不生气,顾客满意
        		sum += customers[i];
        for(j = 0; j < X; ++j)
        	if(grumpy[j] == 1)//生气,控制住,带来的额外收益
        		benefit += customers[j];
        sum += benefit;
    	maxSum = sum;
    	for(i=0; j < customers.size(); ++i,++j)
    	{
    		if(grumpy[i] == 1)//左边滑出X窗口了,生气不再有收益
    			sum -= customers[i];
    		if(grumpy[j] == 1)//右边进入X窗口了,X控制我,我不生气
    			sum += customers[j];
    		maxSum = max(maxSum, sum); 
    	}
    	return maxSum;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael阿明

如果可以,请点赞留言支持我哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值