通过率 68% · 提交 868 · 通过 589
小慕负责管理一个停车场,停车场里有一,0 表示该车位为空,1 表示该车位已有车辆停放。已知车位上至少停了一辆车,也至少有一个空位。 为了减少剐蹭风险,小慕需要为一位即将停车的用户找到一个空车位,使得该车位与最近车辆的距离尽可能大。请帮助小慕计算出这个最大距离。
这类题属于华为 OD 机考真题方向中「100分 / 贪心」方向的高频题型,通常考察对「100分 / 贪心」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
1、一个用半角逗号分割的停车标识字符串,停车标识为 0 或 1,0 为空位,1 为已停车。 2、停车位最多 100 个。
输出一个整数记录最大距离。
示例 1
输入示例
1,0,0,0,0,1,0,0,1,0,1
输出示例
2
选择第2个车位,最近的停车位为第0个车位,距离为2。或选择第3个车位,最近的停车位为第5个车位,距离为2
示例 2
输入示例
1,1,0,0,1,0,0,0,0,0,1
输出示例
3
选择第7个车位,最近的停车位为第4个车位和第10个车位,距离均为3。
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
题干中告知:至少停了一辆车在车位上,也至少有一个空位没有停车。说明输入的数组中至少有一个 1,也至少有一个 0,不会出现停车位全满或者全空的情况。
所停的车位有两种情况需要考虑:
为了使得所停位置和最近的车距离最大,我们贪心地思考这个问题:
有了以上贪心的思路,这道题就非常简单了:
1. 我们首先找到最左边的 1 和最右边的 1 的位置(索引),分别记为 left 和 right 2. 根据 left 和 right 计算按照第一种情况停车,能得到的最大距离,即 ans = max(left, n-1-right) 3. 然后遍历剩下的区间 lst[left+1:right+1],每找到一个 1,就计算其位置 i 和上一个 1 的位置 pre 之间的距离的一半 (i-pre)//2,即为停在区间 lst[pre:i+1] 中的车,能取得的距离左右两辆车的最大距离,再将该结果和原先的 ans 比较并更新即可
另外,因为停车位最多 100 个,这个数据量很小,所以用暴力解肯定也是可以通过的。所谓暴力解,即对于所有 0,都去考虑其左边或右边的最近车位的距离,然后不断更新答案,这样的时间复杂度是 O(N²),但是非常不推荐用这样的暴力解,因为一旦把数据量提上去就无法通过了,如果是面试时手撕代码遇到这样的题,面试官肯定也不满足你用暴力解的。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有