华为OD机试 - 最少停车数(Java 2024 E卷 100分)

一、题目描述

特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。

车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。

统计停车场最少可以停多少辆车,返回具体的数目。

二、输入描述

整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。

输入0,0,1,0,1,1,1,0,0,1,1,0。

输入说明:

小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。

1表示1个小车,两个连续的1表示货车,三个连续的1表示卡车。

三、输出描述

整型数字字符串,表示最少停车数目。

四、测试用例

测试用例1

1、输入

1,1,0,1,1,1,0,1

2、输出

3

3、说明

第1-2个元素连续两个1,表示一辆货车。

第4-6个元素连续三个1,表示一辆卡车。

第8个元素是一个1,表示一辆小车。

一辆货车、一辆卡车、一辆小车,总共3辆车。

测试用例1

1、输入

1,1,1,1,0,1,1,0,1

2、输出

4

3、说明

第1-4个元素连续4个1,有1辆卡车和1辆小车,最少为2辆车。
第6-7个元素是1辆货车,最少为1辆车。
第9个元素是1辆小车,最少为1辆车。
所以总共是4辆车。

五、解题思路

  1. 遍历输入数组cars[],统计连续的1,根据不同的连续长度,将它们对应成不同的车(小车、货车、卡车)。
  2. 当我们遇到“0”时,意味着当前的一段连续的“1”已经结束,可以将这一段的连续“1”对应为相应的车辆。
  3. 重复此过程直到遍历完整个数组。

六、Java算法源码

public class Test00 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入的整型字符串数组,转为cars数组
        String input = scanner.nextLine();
        String[] inputArr = input.split(",");
        int[] cars = new int[inputArr.length];
        for (int i = 0; i < inputArr.length; i++) {
            cars[i] = Integer.parseInt(inputArr[i]);
        }

        // 计数停车的数量
        int minCars = 0;

        // 遍历数组,找到连续的"1",根据连续长度确定车辆类型
        for (int i = 0; i < cars.length; i++) {
            if (cars[i] == 1) {
                int count = 0;

                // 统计连续的1的个数
                while (i < cars.length && cars[i] == 1) {
                    count++;
                    i++;
                }

                // 根据连续1的数量计算车辆数量
                if (count >= 3) {
                    minCars += count / 3;  // 每三个1是一辆卡车
                    count = count % 3;
                }
                if (count == 2) {
                    minCars += 1;  // 两个1是一辆货车
                } else if (count == 1) {
                    minCars += 1;  // 一个1是一辆小车
                }
            }
        }

        // 输出最终的最少停车数量
        System.out.println(minCars);
    }
}

七、效果展示

1、输入

0,0,1,1,1,0,0,1,1,1,1

2、输出

3

3、说明

第3-5个元素连续三个1,表示一辆卡车。

第8-11个元素连续四个1,可以分为一辆卡车和一辆小车(前三个1为卡车,剩下一个1为小车)。

一辆卡车和一辆卡车加一辆小车,总共3辆车。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值