【华为OD-E卷 - 机房布局 100分(python、java、c++、js、c)】
【华为OD-E卷 - 机房布局 100分(python、java、c++、js、c)】
题目
小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。
为了简化题目,假设这个机房是一整排,M表示机柜,I表示间隔,请你返回这整排机柜,至少需要多少个电箱。 如果无解请返回 -1 。
输入描述
- cabinets = “MIIM”
其中 M 表示机柜,I 表示间隔
输出描述
- 表示至少需要2个电箱
备注
- 1 ≤ strlen(cabinets) ≤ 10000 其中 cabinets[i] = ‘M’ 或者 ‘I’
用例
用例一:
输入:
MIIM
输出:
2
用例二:
输入:
MIM
输出:
1
用例三:
输入:
M
输出:
-1
用例四:
输入:
MMM
输出:
-1
python解法
- 解题思路:
- 输入的字符串 s 代表一个排列,其中字符 ‘M’ 和 ‘I’ 代表物品和箱子。
目标是通过判断字符 ‘M’ 和 ‘I’ 的相对位置来计算可以形成多少对 “箱子”。
每对 “箱子” 由一个 ‘M’ 和一个 ‘I’ 组成,可以是 ‘M’ 在前,‘I’ 在后;也可以是 ‘I’ 在前,‘M’ 在后。
遍历字符串,如果当前字符是 ‘M’,则检查其左右相邻的字符是否是 ‘I’,并确保不会重复计算。
如果找不到匹配的 ‘I’ 或者有不符合条件的字符排列,则返回 -1。
s = input()def calc_boxes(s):l = len(s) # 获取字符串长度count = 0 # 初始化箱子计数i = 0 # 初始化遍历索引while i < l: # 使用while循环遍历字符串if s[i] == 'M': # 如果当前字符是'M'if i + 1 < l and s[i + 1] == 'I': # 如果'M'后面是'I'count += 1 # 找到一对箱子,计数加1i += 2 # 跳过这对'M'和'I',继续检查下一个字符elif i - 1 >= 0 and s[i - 1] == 'I': # 如果'M'前面是'I'count += 1 # 找到一对箱子,计数加1i += 1 # 跳过当前的'M',继续检查下一个字符else:return -1 # 如果'M'没有配对的'I',返回-1else:i += 1 # 如果当前字符不是'M',继续向后遍历return count # 返回找到的箱子对数print(calc_boxes(s)) # 输出结果
java解法
- 解题思路
- 给定一个字符串,其中字符 ‘M’ 表示机器,字符 ‘I’ 表示电箱。目标是计算出能够组成多少个机器与电箱的配对,且每个配对必须由一个 ‘M’ 和一个 ‘I’ 组成。
配对时,优先选择将 ‘M’ 与其右侧的 ‘I’ 配对,如果右侧没有 ‘I’,则尝试与左侧的 ‘I’ 配对。
如果无法找到任何有效的配对,则返回 -1。
遍历字符串时,如果 ‘M’ 已经与电箱配对成功,则跳过这部分字符,继续检查下一个可能的配对
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.next(); // 输入字符串System.out.println(getMinBoxes(input)); // 输出最小电箱数}// 主函数用于返回最小电箱数public static int getMinBoxes(String str) {return countValidBoxes(str); // 调用辅助方法进行电箱数计算}// 计算有效的电箱对数private static int countValidBoxes(String str) {int length = str.length(); // 获取字符串长度int totalBoxes = 0; // 初始化电箱计数器// 遍历字符串,根据规则判断电箱放置for (int i = 0; i < length; i++) {if (isMachine(str, i)) { // 判断当前字符是否是机器 'M'// 尝试优先放置右边的电箱if (canPlaceRight(str, i)) {totalBoxes++; // 成功放置电箱,更新电箱计数i += 2; // 跳过已处理的部分,移动索引}// 若不能放置右边,尝试放置左边else if (canPlaceLeft(str, i)) {totalBoxes++; // 成功放置电箱,更新电箱计数}// 两边都无法放置电箱,则返回 -1else {return -1;}}}return totalBoxes; // 返回总的电箱数量}// 判断当前位置字符是否是机器 'M'private static boolean isMachine(String str, int index) {return str.charAt(index) == 'M'; // 如果字符为 'M' 返回 true}// 判断能否在右边放置电箱private static boolean canPlaceRight(String str, int index) {return index + 1 < str.length() && str.charAt(index + 1) == 'I'; // 判断右边是否是 'I'}// 判断能否在左边放置电箱private static boolean canPlaceLeft(String str, int index) {return index - 1 >= 0 && str.charAt(index - 1) == 'I'; // 判断左边是否是 'I'}
}
C++解法
- 解题思路
更新中
C解法
更新中
JS解法
更新中
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
相关文章:
【华为OD-E卷 - 机房布局 100分(python、java、c++、js、c)】
【华为OD-E卷 - 机房布局 100分(python、java、c、js、c)】 题目 小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。 为了简化题目,假设这个机房…...
【竞技宝】LOL:IG新赛季分组被质疑
北京时间2024年12月31日,今天已经2024年的最后一天,在进入一月之后,英雄联盟将迎来全新的2025赛季。而目前新赛季第一阶段的抽签结果已经全部出炉,其中人气最高的IG战队在本次抽签中抽到了“绝世好签”引来了网友们的质疑。 首先介…...
ChatBI来啦!NBAI 正式上线 NL2SQL 功能
NebulaAI 现已正式上线 NL2SQL 功能,免费开放使用! 什么是 NL2SQL?NL2SQL 即通过自然语言交互,用户可以轻松查询、分析和管理数据库中的数据(ChatBI),从此摆脱传统复杂的数据库操作。 欢迎免费…...
8. Web应用程序(Web)
8. Web应用程序(Web) Spring Boot 非常适用于Web应用程序开发。你可以使用嵌入式 Tomcat、Jetty、Undertow或Netty创建一个独立的HTTP服务器。大多是Web应用程序都会使用 spring-boot-starter-web 依赖模块来快速启动和运行项目。你也可以选择使用 spri…...
Linux内核修改内存分配策略
今天遇到了如下的内核报错 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f0e1e06c000, 65536, 1) failed; errorCannot allocate memory (errno12)这个报错是因为,linux会对大部分的内存资源申请都回复允许,以便于运行更…...
六大亮点解析:AI视频监控助力部队训练安全管理
一、用户痛点: 在部队的日常训练和任务执行中,官兵的安全始终是最为重要的保障。然而,传统的监控方式存在显著的局限性,尤其是在高强度、长时间的训练过程中,人工值守监控容易产生疲劳,误判的风险大&#…...
【从零开始入门unity游戏开发之——C#篇33】C#委托(`Delegate`)和事件(`event` )、事件与委托的区别、Invoke()的解释
文章目录 一、委托(Delegate)1、什么是委托?2、委托的基本语法3、定义自定义委托4、如何使用自定义委托5、多播委托6、C# 中的系统委托7、GetInvocationList 获取多个函数返回值8、总结 二、事件(event )1、事件是什么…...
大数据与机器学习(它们有何关系?)
想了解大数据和机器学习吗?我们将为你解释它们是什么、彼此之间有何关联,以及它们为何在数据密集型应用中如此重要。 大数据和机器学习是如何相互关联的? 大数据指的是传统存储方法无法处理的海量数据。机器学习则是计算机系统从观察结果和…...
深入浅出 Spring(一) | Spring简介、IOC理论推导、快速上手 Spring
1. spring 1.1 简介 Spring : 春天 —>给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。 很难想象…...
IDEA 社区版 SpringBoot不能启动
报错原因,Failed to load class [javax.servlet.Filter] <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope> </dependency>…...
职场常用Excel基础01-数据验证
大家好,excel在职场中使用非常频繁,今天和大家一起分享一下excel中数据验证相关的内容~ 在Excel中,数据验证(Data Validation)是一项非常有用的功能,它可以帮助用户限制输入到单元格中的数据类型和范围&am…...
活动预告 |【Part1】Microsoft Azure 在线技术公开课:数据基础知识
课程介绍 参加“Azure 在线技术公开课:数据基础知识”活动,了解有关云环境和数据服务中核心数据库概念的基础知识。通过本次免费的介绍性活动,你将提升在关系数据、非关系数据、大数据和分析方面的技能。 活动时间:01 月 07 日…...
RabbitMQ - 1 ( 7000 字 RabbitMQ 入门级教程 )
一: 在互联网行业,许多公司喜欢用动物命名产品或作为公司的 Logo 和吉祥物,比如腾讯的企鹅、京东的狗、美团的袋鼠、携程的海豚,而阿里更是凭借蚂蚁、飞猪、天猫、菜鸟、闲鱼、盒马等,打造了一座“动物园”。Rabbit&a…...
Docker Compose 构建 EMQX 集群 实现mqqt 和websocket
EMQX 集群化管理mqqt真香 目录 #目录 /usr/emqx 容器构建 vim docker-compose.yml version: 3services:emqx1:image: emqx:5.8.3container_name: emqx1environment:- "EMQX_NODE_NAMEemqxnode1.emqx.io"- "EMQX_CLUSTER__DISCOVERY_STRATEGYstatic"- …...
Spring 过滤器:OncePerRequestFilter 应用详解
在Web应用中,过滤器(Filter)是一个强大的工具,它可以在请求到达目标资源之前或响应返回客户端之前对请求或响应进行拦截和处理。然而,在某些情况下,我们可能希望确保过滤器逻辑在一次完整的HTTP请求中仅执行…...
3.CSS字体属性
3.1字体系列 CSS使用font-family属性定义文本的字体系列。 p{font-family:"微软雅黑"} div{font-family:Arial,"Microsoft Yahei",微软雅黑} 3.2字体大小 css使用font-size属性定义字体大小 p{ font-size:20px; } px(像素)大小是我们网页的最常用的单…...
微信小程序 单选多选radio/checkbox 纯代码分享
单选按钮 <radio-group class"radiogroup" bindchange"radioChange"> <label class"radio" wx:for"{{items}}"> <radio value"{{item.name}}" checked"{{item.checked}}" /> {{item.value}} &…...
k8s 部署meilisearch UI
https://github.com/riccox/meilisearch-ui 拉取镜像 sudo docker pull riccoxie/meilisearch-ui:latestk8s 部署 apiVersion: v1 kind: Service metadata:name: meilisearch-uinamespace: meilisearch spec:type: NodePortselector:app: meilisearch-uiports:- port: 24900…...
gitlab 还原合并请求
事情是这样的: 菜鸡从 test 分支切了个名为 pref-art 的分支出来,发布后一机灵,发现错了,于是在本地用 git branch -d pref-art 将该分支删掉了。之后切到了 prod 分支,再切出了一个相同名称的 pref-art 分支出来&…...
ChatGPT最新版本“o3”的概要
o3简介 o3于2024年12月20日发布——也就是OpenAI 12天直播的最后一天。目前处于安全性测试阶段。它是o1的继任者,旨在处理更复杂的推理任务。o3特别针对数学、科学和编程等领域进行了优化。 o3在多项基准测试中表现出色。例如,在ARC-AGI基准测试中&…...
告别网络依赖:用Vue3+Leaflet和IIS搭建本地离线地图服务(附腾讯地图瓦片下载)
构建企业级离线地图解决方案:Vue3Leaflet与IIS深度整合指南 在数字化转型浪潮中,地图功能已成为各类管理系统的基础需求。然而,许多政企单位、军工机构及偏远地区项目往往面临网络不稳定或完全离线的特殊环境。本文将系统介绍如何基于Vue3、L…...
无需参考图像的低光照增强:PairLIE论文中的双输入训练策略详解
无需参考图像的低光照增强:PairLIE论文中的双输入训练策略详解 在移动摄影和安防监控等领域,低光照环境下的图像质量提升一直是计算机视觉研究的重点难点。传统低光照增强方法通常依赖于高质量参考图像进行监督学习,这不仅数据采集成本高昂&a…...
PowerToys中文版:三步搞定Windows效率工具的完全汉化体验
PowerToys中文版:三步搞定Windows效率工具的完全汉化体验 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是否曾经因为PowerToys的英文界面…...
sing-box常见问题排查:99%的用户都会遇到的坑
sing-box常见问题排查:99%的用户都会遇到的坑 引言 sing-box作为一款功能强大的通用代理平台(The universal proxy platform),在使用过程中难免会遇到各种问题。本文将针对用户最常遇到的配置错误、连接失败、日志分析等问题提供…...
【无人机】基于matlab模拟无人机在一个移动地面车辆自主着陆垂直起降在受风力干扰和转子推力影响【含Matlab源码 15287期】
💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞Ὁ…...
Karpathy新玩法:AI搭建个人知识库,改写大模型记忆逻辑
【导语:Karpathy推出用AI搭建个人知识库的新玩法,该知识库能自我更新、越用越聪明。其搭建教程涵盖导入数据、前端查看、实际运用等步骤,还转变了大模型记忆逻辑,影响深远。】AI知识库:从“存储工具”到“运行系统”传…...
Ostrakon-VL 代码辅助新体验:像使用 Codex 一样生成图像处理代码
Ostrakon-VL 代码辅助新体验:像使用 Codex 一样生成图像处理代码 1. 视觉编程的新可能 想象一下这样的场景:你看到一张经过"老照片修复"处理的图片效果,想在自己的项目中实现类似风格,却不知道从何下手编写代码。传统…...
基于GTE模型的新闻推荐系统:个性化内容分发实践
基于GTE模型的新闻推荐系统:个性化内容分发实践 1. 引言 每天打开新闻应用,你是否经常看到一堆完全不感兴趣的内容?或者发现推荐的文章总是那几类,缺乏新鲜感?传统的新闻推荐系统往往基于简单的关键词匹配或热门排行…...
国产AI芯动力:复旦微FMQL100TAI900 FPGA原型验证板全解析
1. 这块国产FPGA板卡凭什么值得关注? 第一次拿到复旦微FMQL100TAI900开发板时,最让我惊讶的是其全产业链国产化的完成度。从主芯片到电源管理IC,甚至每个电阻电容都贴着中文标识,这在三年前根本不敢想象。作为长期从事AI硬件开发的…...
【回眸】系统读书笔记(十)盘点调动资源
目录 前言 资源盘点可以帮你创造选择 三类人生资源 直接价值资源 知识技能类:认知储备和实操能力、学科知识、行业认知、上手操作的技能 记录行为和结果:干成过什么、搞定过什么、负责过什么? 能力逆向推导:把行为翻译成资源…...
