全网最全面的华为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);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
