题目

传送门

文本

今天,书店老板有一家店打算试营业 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)

模板

int maxSatisfied(int* customers, int customersSize, int* grumpy, int grumpySize, int X){

}

解题

分析

本题可以使用滑动窗口

总体思路如下

首先统计老板不控制自己情绪的情况下会满意的客户的总人数

   for (int i = 0; i < customersSize; i++) if (grumpy[i] == 0) total += customers[i];

再加入老板控制情绪,长度为X,自前向后滑动这个X窗口

 for (int i = 0; i < X; i++) add += customers[i] * grumpy[i];

已知生气时状态为1,我们控制情绪之后就会将这部分的人留下,所以可以理解为

customer[i]*grupy[i]

而本身据不生气的时候状态为0的情况已经在第一步统计进去了

往后滑动的过程中,我们需要减去前面的,增加后面的

   for (int i = X; i < customersSize; i++)
add = add - customers[i - X] * grumpy[i - X] + customers[i] * grumpy[i];

源码

int maxSatisfied(int* customers, int customersSize, int* grumpy, int grumpySize, int X) {
int total = 0;
int n = customersSize;
for (int i = 0; i < customersSize; i++)
if (grumpy[i] == 0)
total += customers[i];
int add = 0;
for (int i = 0; i < X; i++)
add += customers[i] * grumpy[i];
int maxAdd = add;
for (int i = X; i < customersSize; i++) {
add = add - customers[i - X] * grumpy[i - X] + customers[i] * grumpy[i];
maxAdd = fmax(maxAdd, add);
}
return total + maxAdd;
}

执行结果

最新文章

  1. 数据库SQL基本操作
  2. HTML5中支持新的媒体元素有这些
  3. Ehlib安装方法有窍门
  4. linux 查看Java 进程的内存使用情况
  5. &lt;Oracle Database&gt;后台进程
  6. PHP5与MySQL数据库操作
  7. JSON.NET 简单的使用
  8. CSS自定义select下拉选择框(不用其他标签模拟)
  9. Eclipse 调整代码颜色的地方
  10. maven占位符
  11. VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序
  12. centos下安装Jenkins轻松搞定
  13. kali系统破解WPA密码实战
  14. 免插件为WordPress文章中标签添加内链
  15. nginx 启动错误
  16. 【原创】运维基础之Docker(3)搭建私有仓库
  17. Lambda表达式树解析(下)
  18. 配置react, redux, next.js环境
  19. windows假装更新升级
  20. linux下安装jdk,tomcat,maven

热门文章

  1. servelet 实现Post接口访问
  2. (转)pip和easy_install使用方式
  3. 2.DHCP的基本概念
  4. [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(2)
  5. JavaHomeWorkList
  6. Codeforces Round #638 (Div. 2)
  7. UVA 10480 Sabotage (最大流最小割)
  8. sort排序使用以及lower_bound( )和upper_bound( )
  9. CQRS+Event Sourcing
  10. SpringBoot整合shiro-MD5盐值加密