1052. 爱生气的书店老板-滑动窗口算法
算法 窗口 滑动 老板
2023-09-14 09:06:52 时间
1052. 爱生气的书店老板-滑动窗口算法
有一个书店老板,他的书店开了 n 分钟。每分钟都有一些顾客进入这家商店。给定一个长度为 n 的整数数组 customers ,其中 customers[i] 是在第 i 分钟开始时进入商店的顾客数量,所有这些顾客在第 i 分钟结束后离开。
在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。
当书店老板生气时,那一分钟的顾客就会不满意,若老板不生气则顾客是满意的。
书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 minutes 分钟不生气,但却只能使用一次。
请你返回 这一天营业下来,最多有多少客户能够感到满意 。
示例 1:
输入:customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3
输出:16
解释:书店老板在最后 3 分钟保持冷静。
感到满意的最大客户数量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.
示例 2:
输入:customers = [1], grumpy = [0], minutes = 1
输出:1
这一题很有趣哈,我个人觉得很不错的一个题目,主要这里的条件比较多,我们需要综合去考虑,解题代码如下:
int maxSatisfied(int* customers, int customersSize, int* grumpy, int grumpySize, int minutes){
int index=0;
int windows[minutes];
int sum=0;
int size=0;
int max=0;
int count=0;
for(int i=0;i<customersSize;i++){
if(grumpy[i]==0){
count=count+customers[i];
}
if(i<minutes){
if(grumpy[i]==1){
windows[i%minutes]=customers[i];
sum=customers[i]+sum;
}
else{
windows[i%minutes]=0;
}
}
else{
if(grumpy[i]==1){
sum=sum+customers[i]-windows[i%minutes];
windows[i%minutes]=customers[i];
}
else{
sum=sum-windows[i%minutes];
windows[i%minutes]=0;
}
}
// printf("wind %d ",windows[i%minutes]);
if(sum>max){
max=sum;
}
printf("%d ",sum);
}
return count+max;
}
相关文章
- 经典算法:不大于N的特殊数字
- 算法刷题笔记05:Tree
- java冒泡排序经典代码_Java 8大经典排序算法(含源代码),必须收藏!
- 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序[通俗易懂]
- C++滑动窗口算法_最短连续包含子串
- day2:算法之美|打开算法之门与算法复杂性
- 决策树算法的原理(接地气版)
- 算法复现 | 使用KMEAN算法对印度洋台风路径进行分类
- Java算法面试题
- 【数据挖掘】基于密度的聚类方法 - DBSCAN 方法 ( DBSCAN 原理 | DBSCAN 流程 | 可变密度问题 | 链条现象 | OPTICS 算法引入 | 聚类层次 | 族序概念 )
- NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等
- MySQL求和算法在PHP中的应用(mysql求和php)
- Oracle数据库排序算法技巧(oracle排序)
- 滑动窗口算法在Redis中的应用(滑动窗口算法 redis)
- Redis中的主节点选举算法研究(redis选举主节点算法)
- php分库分表hash算法
- python算法排序实现快速排序
- python实现归并排序算法
- java数据结构和算法学习之汉诺塔示例