爱生气的书店老板
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爱生气的书店老板相关的知识,希望对你有一定的参考价值。
爱生气的书店老板
一天,书店老板有一家店打算试营length(customers.lenght)分钟,
每分钟都会有一些顾客(customers[i])进入书店,所有的顾客只会待一分钟就离开。
在某些时候老板会生气,如果老板在第i分钟生气,那么生气了就有grumpy[i] =1,否则 groupy[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、如果老板不生气,那么顾客肯定是满意的,我们先计算所有的满意数量。
2、如果老板生气,那么顾客肯定是不满意的,这些不满意的构成一个新的数组。转化为在这个数组中找出连续的K分钟(K窗口)的最大值!!!
代码演示:
/***********************************************************
*版权所有:(C) 2021.7.22 烽火编程(第八方面军)
*
*文件名称:爱生气的书店老板
*内容摘要:滑动窗口最大值
*当前版本:1-1
*文件作者:帅子牛
*完成日期:2021.7.27
*
*修改记录:暂无
***********************************************************/
#include <stdio.h>
#define N 8 //人群分8波进入书店
int fun(int customers[],int grumpy[],int X){
int satisfied=0;//本来就满意的人数
int length = N;
int nosatisfied[N]={0};
int i;
for(i=0;i<length;i++){
if(grumpy[i]==0){
satisfied += customers[i];//满意的人数
}else{
nosatisfied[i] = customers[i]*grumpy[i];//不满意的人数
}
}
int left = 0,right = 0;
int max = 0,sum = 0;
for(right=0;right<length;right++){
sum += nosatisfied[right];
//如果窗口长度超过X,要减去窗口左边的值,同时窗口左边右移一步
if(right-left>=X){
sum -= nosatisfied[left++];
}
max = max>sum?max:sum;
}
return satisfied+max;
}
int main() {
int customers[N]={1,0,1,2,1,1,7,5};//顾客人数
int grumpy[N]={0,1,0,1,0,1,0,1};//老板发脾气的情况
int X=3;//书店老板可以控制的的时间时长
int MAX = fun(customers,grumpy,X);
printf("最多有%d个客户感到满意",MAX);
return 0;
}
以上是关于爱生气的书店老板的主要内容,如果未能解决你的问题,请参考以下文章