LOADING

百度&必应权4, 日IP8000. 查看详情
自助收录

2023年华为OD机考真题:机房布局

算法刷题2年前 (2023)更新 江南白衣
381 0 0
2023年华为OD机考真题:机房布局

全网最全面的华为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);
    }
}

 

© 版权声明

相关文章

暂无评论

暂无评论...