题目描述
https://hydro.ac/d/HWOD2023/p/OD210
题目描述
特定大小的停车场,数组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辆车
题解
要想停最少的车,那就是要让有车的地方尽可能的都是卡车。代码如下:
public static int countParkedCars(String[] cars) {
int count = 0; // 存放结果
int curContinuous = 0; // 记录当前连续为1 的停车位数量
for (int i = 0; i < cars.length; i++) {
// 每次都选择停放最大的车(占用停车位更多),到最后才会停放更少的车
if (cars[i].equals("1") && curContinuous <= 3) {
curContinuous++;
} else {
if (curContinuous == 0) {
continue;
}
count++;
curContinuous = 0;
}
}
// 这是为了防止比如 {1,1,1}这种情况发生。如果最后一个是1,在上面的循环中是不会计算到的,这里需要补充计算一下
if (curContinuous > 0) {
count++;
}
return count;
}