leetcode 2483. Minimum Penalty for a Shop(商店的最少代价)

在这里插入图片描述
在这里插入图片描述

字符串customers只包含’Y’和’N’两种字母, 表示 i 时刻商店是否有客人来。
如果商店在 i 时刻处于开门状态,'Y’的代价是0,'N’的代价是1.(开门了却没有客人就算损失)。
反之,在 i 时刻处于关门状态,'N’的代价是0,'Y’的代价是1.(关门却有客人来也是损失)。

如果商店在 j 时刻关门,那么从 j 时刻到最后都是关门状态。
问在哪个时刻关门代价最小。

思路:

方法一

先计算一直在关门状态(0时刻关门)的代价。
然后把关门的时间右移,这时候只需要在上一步代价的基础上改变前一时刻的代价值。

举个例子,看Example1.
先计算0时刻关门的代价为3.

然后关门时刻移动到时刻1,这时时刻1后面还是关门状态,代价上没有变化,有变化的是0时刻的关门状态变成了开门状态。
这时候需要修改0时刻的代价,0时刻是’Y’, 关门时代价是1,开门代价是0,关门到开门状态需要减去代价1.
这时在上一步代价3的基础上减去多出来的代价1. 所以时刻1的代价为3-1=2.
后面依次类推。
直到移动到字符串最右边(边界外,表示一直开门)。

这个过程中记下最小代价和对应的时刻。

    public int bestClosingTime(String customers) {char[] chs = customers.toCharArray();int cntY = 0;int cntN = 0;int n = chs.length;int[] penalty = new int[n+1];int minP = 0;int minIdx = 0;//从0时刻起不开门的代价for(int i = n-1; i >= 0; i--) {if(chs[i] == 'Y'){cntY ++;penalty[i] = penalty[i+1] + 1;} else {cntN ++;penalty[i] = penalty[i+1];}}if(cntY == n) return n;if(cntN == n) return 0;//i时刻关门minP = penalty[0];for(int i = 1; i <= n; i++) {if(chs[i-1] == 'Y') penalty[i] = penalty[i-1]-1;else penalty[i] = penalty[i-1]+1;if(penalty[i] < minP) {minP = penalty[i];minIdx = i;}}return minIdx;}

方法二

其实不需要计算初始0时刻关门的代价。
因为它是多少并不影响结果。

还是Example1。我们把0~最后时刻关门的代价排列一下:

3, 2, 1, 2, 1

第2时刻代价最小,选在第2时刻关门。

这时,把初始时刻关门的代价由3改到0,后面还是和方法1一样,改变前一时刻的代价,于是得到

0, -1, -2, -1, -2

结果还是第2时刻代价最小。所以初始0时刻关门代价是多少都无所谓,只要后面能得到代价最小的时刻即可。

省去方法一中计算0时刻关门的代价,默认0时刻关门代价是0.
然后右移关门时刻 i , 每移一步,改变前一时刻的代价。比如移到1时,改变0时刻的代价。
0时刻是’Y’, 关门代价是1,开门代价是0,现在开门了需要把代价-1,反之如果是’N’就+1.

右移的过程中记录下最小代价和对应的时刻。

    public int bestClosingTime(String customers) {char[] a = customers.toCharArray();int n = a.length;int j = -1, penalty = 0, minP = 0;for (int i = 0; i < a.length; i++) {penalty += a[i] == 'Y'? -1 : 1;if (penalty < minP) {j = i;minP = penalty;}}return j + 1;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/60286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AssemblyManager 程序集管理器

AssemblyManager 程序集管理器 程序执行中使用反射对框架的搭建有着强大的影响&#xff0c;如何管理程序集方便使用反射获取类型操作对象是本文章的重点 1.AssemblyInfo 对于一个程序集这里使用一个AssemblyInfo对象进行管理 Assembly &#xff1a;对应的程序集AssemblyTyp…

QT(8.30)常用类与组件,实现登录界面

1.作业&#xff1a; 完成一个登录界面(图片未附带): 头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QLineEdit>//行编辑器#include<QIcon>//图标#include<QLabel>//标签#include<QPushButton>//按钮#include<QIc…

如何在Spring Boot应用中使用Nacos实现动态更新数据源

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Prometheus监控(三)架构

文章目录 Prometheus架构图Prometheus生态圈组件Prometheus Serverclient librariesPushgatewayexporterAlartmanager Prometheus架构理解存储计算层采集层应用层 Prometheus架构图 Prometheus生态圈组件 Prometheus Server 主服务器&#xff0c;负责收集和存储时间序列数据 …

发布自己的npm包

1.初始化npm包 npm init 输入npm init后&#xff0c;一路默认即可初始化成功&#xff0c;如下&#xff1a; 初始化成功后会生成一个package.json文件 n&#xff08;以我的文件夹demo-npm-dir为例&#xff09; package.json配置如下&#xff1a; {"name": "n…

容器技术,1. Docker,2. Kubernetes(K8s):

目录 容器技术 1. Docker&#xff1a; 2. Kubernetes&#xff08;K8s&#xff09;&#xff1a; Docker和Kubernetes 容器的主要应用场景有哪些&#xff1f; 容器技术 有效的将单个操作系统的资源划分到孤立的组中&#xff0c;以便更好的在孤立的组之间平衡有冲突的资源使…

对于论文Semi-Supervised Classification with Graph Convolutional Networks,小白的学习理解

参考笔记&#xff1a;论文笔记&#xff1a;Semi-Supervised Classification with Graph Convolutional Networks_hongbin_xu的博客-CSDN博客 论文笔记&#xff1a;SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS_semi supervised classification_饮冰l的博…

IO模型:阻塞和非阻塞

一、五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞&#xff1a;不能操作就返回错误 多路复用&#xff1a;委托中介监控 信号驱动&#xff1a;让内核如果能操作时发信号&#xff0c;在信号处理函数中操作 异步IO&#xff1a;向内核注册操作请求&…

【微服务部署】08-监控与告警

文章目录 1. PrometheusOperator1.1 优势1.2 配置脚本1.3 部署脚本 2. Granfana实现监控看板2.1 Granfana核心特性2.2 部署文件 目前Kubernetes中最流行的监控解决方案是使用Prometheus和AlertManager 1. PrometheusOperator 1.1 优势 自动化安装将配置资源化灵活的扩展能力 …

ctfshow—萌新—杂项1

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up ed400fbcff269bd9c65292a97488168a 首先这是一个md5&#xff0c;然后在线解密一下&#xff0c;解密站点 https://www.somd5.com/ 解密出来的内容是helloctf 然后去掉ctf就是最终的答案 结果就是flag{hello}…

023 - STM32学习笔记 - 扩展外部SDRAM(二) - 扩展外部SDRAM实验

023- STM32学习笔记 - 扩展外部SDRAM&#xff08;一&#xff09; - 扩展外部SDRAM实验 本节内容中要配置的引脚很多&#xff0c;如果你用的开发板跟我的不一样&#xff0c;请详细参照STM32规格书中说明对相关GPIO引脚进行配置。 先提前对本届内容的变成步骤进行总结如下&…

supervisorctl(-jar)启动配置设置NACOS不同命名空间

背景 由于需要在上海服务器上面配置B测试环境&#xff0c;原本上面已有A测试环境&#xff0c;固需要将两套权限系统分开 可以使用不同的命名空间来隔离启动服务 注&#xff1a;本文章均不涉及公司机密 1、新建命名空间 命名空间默认会有一个public&#xff0c;并且不能删除&a…

【QT】信号和槽(15)

前面的内容说了很多不同的控件如何使用&#xff0c;今天来看下QT的核心&#xff0c;信号与槽&#xff08;Signals and slots&#xff09;&#xff01; 简单理解一下&#xff0c;就是我们的信号与槽连接上了之后&#xff0c;发射一个信号给到槽&#xff0c;槽函数接收到了这个信…

数据库(一) 基础知识

概述 数据库是按照数据结构来组织,存储和管理数据的仓库 数据模型 数据库系统的核心和基础是数据模型&#xff0c;数据模型是严格定义的一组概念的集合。因此数据模型一般由数据结构、数据操作和完整性约束三部分组成。数据模型主要分为三种:层次模型&#xff0c;网状模型和关…

docker linux(centos 7) 安装

这是个目录 1:安装1:手动安装(适用于centos7)之一2:手动安装(适用于centos7)之二3&#xff1a;一键安装docker4:二进制安装1&#xff1a;下载二进制包2&#xff1a;解压3&#xff1a;移动文件4&#xff1a;后台运行docker5&#xff1a;测试 dicker命令表999&#xff1a;遇到的问…

java解析html

目录 场景描述一.引入依赖二.调用接口响应回来的html三.测试代码 场景描述 我调用外部接口&#xff0c;但是返回来的数据是html的格式&#xff0c;所以我就需要进行处理来获得我想要的数据。我使用的是jsoup。 一.引入依赖 <dependency><groupId>org.jsoup</gr…

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码)

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例(附源码)。 为了增强程序的可观测性,方便问题定位,在发起数据库操作请求时我们也可以调用代码统一集成链路跟踪的能力,Jaeger 是当今比较流行的选择。使用 Gorm 来将操作信息集成到 Jaeger 中。 全面…

C++笔记之临时变量与临时对象与匿名对象

C笔记之临时变量与临时对象与匿名对象 code review! 文章目录 C笔记之临时变量与临时对象与匿名对象1.C中的临时变量指的是什么&#xff1f;2.C中的临时对象指的是什么&#xff1f;3.C中临时对象的作用是什么&#xff1f;什么时候要用到临时对象?4.给我列举具体的例子说明临…

回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介…

html中如何用vue语法,并使用UI组件库 ,html中引入vue+ant-design-vue或者vue+element-plus

html中如何用vue语法&#xff0c;并使用UI组件库 前言 先说一下本次应用的场景&#xff0c;本次项目中&#xff0c;需要引入github中别人写好的插件&#xff0c;插件比较大&#xff0c;没有方法直接在自己项目中&#xff0c;把别人的项目打包合并生成html&#xff08;类似于前…