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

news/2024/7/20 18:19:18 标签: 华为od, 算法, java, python, c++, 面试, 机试

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

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

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加群”

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


http://www.niftyadmin.cn/n/5334410.html

相关文章

文心一言 —— 中国的语言大模型

引言 在人工智能和自然语言处理领域&#xff0c;语言模型的发展正在引领一场技术革命。在这场革命中&#xff0c;中国的文心一言作为一颗新星&#xff0c;正以其独特的能力和特性引起广泛关注。 文心一言的背景 文心一言是中国自主开发的大型语言模型&#xff0c;它集合了先…

省市.js

export default {"addressData": [{text: "北京市&#xff08;直辖市&#xff09;","level": "1",value: "1100",children: [{text: "北京","level": "1",value: "11000"}, ]},{te…

R语言入门——多变量移除

目录 0、引言1、单变量删除的例子2、多变量移除2.1 ls的用法 2.2多变量删除 0、引言 有很多小伙伴在运行程序的时候就想在每次循环结束时提出一些占用内存大且无用的数据或变量&#xff0c;或者仅仅保留一些数据&#xff0c;但是rm的语法在删除多变量时候需要和ls()函数联用。…

基于FPGA的图像双边滤波实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 双边滤波数学模型 4.2 双边滤波的特性 4.3 FPGA实现架构 5.算法完整程序工程 1.算法运行效果图预览 将FPGA数据导入到matlab对比测试&#xff1a; 2.算法运行软件版本 vivado2019.2 …

StarRocks 生成列:百倍提速半结构化数据分析

半结构化分析主要是指对 MAP&#xff0c;STRUCT&#xff0c;JSON&#xff0c;ARRAY 等复杂数据类型的查询分析。这些数据类型表达能力强&#xff0c;因此被广泛应用到 OLAP 分析的各种场景中&#xff0c;但由于其实现的复杂性&#xff0c;对这些复杂类型分析将会比一般简单类型…

运维平台介绍:视频智能运维平台的视频质量诊断分析和告警中心

目 录 一、视频智能运维平台介绍 &#xff08;一&#xff09;平台概述 &#xff08;二&#xff09;结构图 &#xff08;三&#xff09;功能介绍 1、运维监控 2、视频诊断 3、巡检管理 4、告警管理 5、资产管理 6、工单管理 7、运维…

浅聊雷池社区版(WAF)的tengine

雷池社区版是一个开源的免费Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;专为保护Web应用免受各种网络攻击而设计。基于强大的Tengine&#xff0c;雷池社区版提供了一系列先进的安全功能&#xff0c;适用于中小企业和个人用户。 Tengine的故事始于2011年&#xff0c;…

前后端分离,仓储模式的医院安全(不良)事件报告系统

医院安全&#xff08;不良&#xff09;事件报告系统源码&#xff0c;PHP语言开发 医院不良事件上报系统&#xff0c;按照不良事件的管理部门不同&#xff0c;分为护理不良事件、药品不良反应事件、医技不良事件、院内感染事件、输血不良反应事件、器械不良事件、信息不良事件、…