制作网站什么制作,在线制作印章公章,做网站前端和平面配合,做影视网站 片源从哪里来【华为OD-E卷 - 机房布局 100分#xff08;python、java、c、js、c#xff09;】
题目
小明正在规划一个大型数据中心机房#xff0c;为了使得机柜上的机器都能正常满负荷工作#xff0c;需要确保在每个机柜边上至少要有一个电箱。 为了简化题目#xff0c;假设这个机房…【华为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输出
-1python解法
解题思路输入的字符串 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: # 如果当前字符是Mif i 1 l and s[i 1] I: # 如果M后面是Icount 1 # 找到一对箱子计数加1i 2 # 跳过这对M和I继续检查下一个字符elif i - 1 0 and s[i - 1] I: # 如果M前面是Icount 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; // 返回总的电箱数量}// 判断当前位置字符是否是机器 Mprivate 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解法 解题思路
更新中注意
如果发现代码有用例覆盖不到的情况欢迎反馈会在第一时间修正更新。 解题不易如对您有帮助欢迎点赞/收藏