全网最全面的华为OD机试真题汇总,100%原题题库,不需要开会员即可查看全部内容,更多考题请查看真题库。
真题库:https://www.yuque.com/codernav.com/od
题目:机房布局
知识点数组贪心
时间限制:1s 空间限制:256MB 限定语言:不限
题目描述:
小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。
为了简化题目,假设这个机房是一整排,M表示机柜,I表示间隔,请你返回这整排机柜,至少需要多少个电箱。 如果无解请返回 -1 。
输入描述:
cabinets = “MIIM”
其中M表示机柜,I表示间隔
输出描述:
2
表示至少需要2个电箱
补充说明:
1<= strlen(cabinets) <= 10000
其中 cabinets[i] = ‘M’ 或者 ‘I’
示例1
输入:
MIIM
输出:
2
示例2
输入:
MIM
输出:
1
示例3
输入:
M
输出:
-1
示例4
输入:
MMM
输出:
-1
示例5
输入:
I
输出:
0
解题思路:
遍历字符串
当碰到M时,先看后面的值是否为I:
如果是I,则直接安装电箱,且紧接的后面可以共用此电箱,所以不需要管,索引+2。
如果不是I,则查看前面的是否为I:
如果是I,则在前面安装电箱。
如果也不是I,则返回-1,表示无解。
代码实现:Java满分代码实现
package com.codernav.demo.hwod.exam; import java.util.Scanner; /** * @title 机房布局 * @Description 小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。 * 为了简化题目,假设这个机房是一整排,M表示机柜,I表示间隔,请你返回这整排机柜,至少需要多少个电箱。如果无解请返回 -1。 * @Author 开发者导航 * @website https://codernav.com * @date 2023/5/28 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String string = sc.nextLine(); int res = 0; for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); if (c == 'M') { if (i + 1 < string.length() && string.charAt(i + 1) == 'I') { res++; i += 2; } else if (i - 1 >= 0 && string.charAt(i - 1) == 'I') { res++; } else { res = -1; //前后都没有空间则为-1,且退出循环 break; } } } System.out.println(res); } }
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...