最新华为OD机试
题目描述
小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。
为了简化题目,假设这个机房是一整排,M表示机柜,I表示间隔,请你返回这整排机柜,至少需要多少个电箱。 如果无解请返回 -1 。
输入描述
cabinets = “MIIM”
备注:
其中 M 表示机柜,I 表示间隔
1 ≤ strlen(cabinets) ≤ 10000
其中 cabinets[i] = ‘M’ 或者 'I‘
输出描述
2
表示至少需要2个电箱
示例1
输入
MIIM
输出
2
示例2
输入
MIM
输出
1
示例3
输入
M
输出
-1
示例4
输入
MMM
输出
-1
示例5
输入
I
输出
0
解题思路
这个题目的主要意图是计算在给定的机柜排列中,至少需要多少个电箱来保证所有机柜都能正常工作。
示例分析
-
示例 1:
- 输入:
MIIM
- 布局: M(电箱放在这)I M(电箱放在这)I M
- 可以放置 2 个电箱,分别在第一个和第三个机柜旁边。
- 输出:
2
- 输入:
-
示例 2:
- 输入:
MIM
- 布局: M(电箱放在这)I M
- 可以放置 1 个电箱,在第一个机柜旁边即可。
- 输出:
1
- 输入:
-
示例 3:
- 输入:
M
- 只有一个机柜,没有间隔可供放置电箱。
- 输出:
-1
(因为无法满足条件)。
- 输入:
好的,以下是结合稍微复杂用例的优化表达:
代码思路
本题的关键在于合理放置电箱,以确保每个机柜旁边至少有一个电箱。我们采用从左到右的遍历方式,并优先将电箱放在机柜的右侧。