华为OD机试 -停车场最大距离,找车位(C++ Java JavaScript Python)

本文介绍了华为OD机考中关于停车场找车位问题的算法,要求找到使停车人与最近车辆距离最大的车位。提供了C++、Java、JavaScript和Python四种语言的解题思路及代码实现,并给出了相关样例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

停车场有一横排车位,0代表没有停车,1代表有车。至少停了一辆车在车位上,也至少有一个空位没有停车。

为了防剐蹭,需为停车人找到一个车位,使得距停车人的车最近的车辆的距离是最大的,返回此时的最大距离

输入描述

  1. 一个用半角逗号分割的停车标识字符串,停车标识为0或1,0为空位,1为已停车。
  2. 停车位最多100个。

输出描述

输出一个整数记录最大距离。

ACM输入输出模式

如果你经常使用Leetcode,会知道letcode是不需要编写输入输出函数的。但是华为OD机考使用的是 ACM 模式,需要手动编写输入和输出。

所以最好在牛-客上提前熟悉这种模式。例如C++使用cin/cout,python使用input()/print()。JavaScript使用node的readline()console.log()。Java 使用sacnner/system.out.print()

用例

输入 1,0,0,0,0,1,0,0,1,0,1
输出 2
说明

当车停在第3个位置上时,离其最近的的车距离为2(1到3)。

当车停在第4个位置上时,离其最近的的车距离为2(4到6)。

其他位置距离为1。

因此最大距离为2

### 机考代码查重

华为OD机考完成之后,官方会进行代码查重。华为 od 机考确实有很大的概率抽到原题。如果碰到了题库中的原题,一定不要直接使用题解中的代码,尤其是变量名,一定要修改,可以改成毫无意义的单词。除了变量名之外,代码的组织结构和逻辑一定要进行改变,这就要求在日常的刷题中,提前编写好属于自己的代码。

代码思路

  1. 读取输入的停车标识字符串并转换为整数数组。例如,输入"1,0,0,0,0,1,0,0,1,0,1"会被转换为整数数组[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1]。

  2. 创建长度为n的数组leftFreeSpaces和rightFreeSpaces,用于存储每个位置左侧和右侧的空位数量。

  3. 遍历整数数组,计算每个位置左侧的空位数量。如果当前位置为1,则跳过;如果当前位置为0且前一个位置为0,则将当前位置的左侧空位数量设为前一个位置的左侧空位数量加1;否则,将当前位置的左侧空位数量设为0。例如,对于整数数组[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1],计算得到的leftFreeSpaces数组为[0, 1, 2, 3, 4, 0, 1, 2, 0, 1, 0]。

  4. 遍历整数数组,计算每个位置右侧的空位数量。如果当前位置为1,则跳过;如果当前位置为0且后一个位置为0,则将当前位置的右侧空位数量设为后一个位置的右侧空位数量加1;否则,将当前位置的右侧空位数量设为0。例如,对于整数数组[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1],计算得到的rightFreeSpaces数组为[4, 3, 2, 1, 0, 2, 1, 0, 1, 0, 0]。

  5. 初始化最大距离为左侧第一个位置的右侧空位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

算法大师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值