题目描述
停车场有一横排车位,0代表没有停车,1代表有车。至少停了一辆车在车位上,也至少有一个空位没有停车。
为了防剐蹭,需为停车人找到一个车位,使得距停车人的车最近的车辆的距离是最大的,返回此时的最大距离。
输入描述
- 一个用半角逗号分割的停车标识字符串,停车标识为0或1,0为空位,1为已停车。
- 停车位最多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,0,0,0,0,1,0,0,1,0,1"会被转换为整数数组[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1]。
-
创建长度为n的数组leftFreeSpaces和rightFreeSpaces,用于存储每个位置左侧和右侧的空位数量。
-
遍历整数数组,计算每个位置左侧的空位数量。如果当前位置为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]。
-
遍历整数数组,计算每个位置右侧的空位数量。如果当前位置为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]。
-
初始化最大距离为左侧第一个位置的右侧空位