停车场车辆统计 - 华为OD统一考试

发布时间:2024年01月19日

OD统一考试 (C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

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

车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。

输入描述

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

输出描述

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

示例1

输入:
1,0,1

输出:
2

说明:
1个小车占1个车位
第二个车位空
1个小车占3个车位最少有两辆车

示例2

输入:
1,1,0,0,1,1,1,0,1

输出:
3

说明:
1个货车占第1、2个车位
第3、4个车位空
1个卡车占第5、6、7个车位
第8个车位空
1个小车占第9个车位
最少3辆车

题解

停车场的规则是:小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。

我们可以通过遍历输入的车辆状态数组 cars[],同时记录当前连续的占用车位数 d

  • 当遇到有车(1)时 d + 1;
  • 当遇到空位时,计算可以停放多少辆车(贪心的选择: 卡车 》 货车 》 小车),并将 d 置零。
  • 最后,再次检查一下是否还有剩余的车位数未计算,进行补充计算。最终得到停车场最少可以停多少辆车。

复杂度分析

时间复杂度:O(n),其中 n 为输入数组 cars[] 的长度。

空间复杂度:O(1),只使用了常数个变量。

Java

import java.util.Scanner;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] carsStr = scanner.nextLine().split(",");
        int cnt = 0, d = 0;
        for (String st : carsStr) {
            if (st.equals("1")) {
                d += 1;
                continue;
            }

            if (d > 0) cnt += (d - 1) / 3 + 1;
            d = 0;
        }

        if (d > 0) cnt += (d - 1) / 3 + 1;

        System.out.println(cnt);
    }
}

Python

cars = list(input().split(","))
cars.append("0")

cnt, d = 0, 0
for st in cars:
    if st == "1":
        d += 1
        continue

    if d > 0:
        cnt += (d - 1) // 3 + 1
    d = 0
print(cnt)

C++

#include <iostream>
#include <sstream>
#include <vector>

using namespace std;

int main() {
    string input;
    getline(cin, input);
    stringstream ss(input);

    vector<string> carsStr;
    string car;
    while (getline(ss, car, ',')) {
        carsStr.push_back(car);
    }

    int cnt = 0, d = 0;
    for (const string& st : carsStr) {
        if (st == "1") {
            d += 1;
            continue;
        }

        if (d > 0) cnt += (d - 1) / 3 + 1;
        d = 0;
    }
    if (d > 0) cnt += (d - 1) / 3 + 1;

    cout << cnt << endl;

    return 0;
}

????华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ???? 和收藏 ?,让更多的人看到。🙏🙏🙏

文章来源:https://blog.csdn.net/user_longling/article/details/135689618
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。