一、题目描述
特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。
车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。
统计停车场最少可以停多少辆车,返回具体的数目。
二、输入描述
整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。
输入0,0,1,0,1,1,1,0,0,1,1,0。
输入说明:
小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。
1表示1个小车,两个连续的1表示货车,三个连续的1表示卡车。
三、输出描述
整型数字字符串,表示最少停车数目。
四、解题思路
- 读取输入的停车场信息,存储在字符串数组 cars[] 中;
- 初始化变量 total 和 tem 为0,用于记录停车总数和连续有车的长度;
- 遍历停车场数组 cars[],根据当前位置的值进行如下操作:
- 如果当前位置为1,表示有车,将 tem 值加1;
- 如果当前位置为0,表示没车,且 tem 不为0,表示之前有连续的车辆,根据 tem 的值计算可停放的最少车辆数,并累加到 total 中,然后将 tem 重置为0。
- 如果遍历结束后 tem 不为0,表示最后一辆车辆后面没有0了,需要将 tem 的值计算可停放的最少车辆数,并累加到 total 中;
- 输出最少停车数目 total。
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] split = sc.nextLine().split(",");
int total = 0;
int tem = 0;
for (String s : split) {
if (Integer.parseInt(s) == 1) {
tem++;
} else {
if (tem != 0) {
total += calcMin(tem);
}
tem = 0;
}
}
total += calcMin(tem);
System.out.println(total);
}
private static int calcMin(int num) {
int total = 0;
while (num >= 3) {
num -= 3;
total++;
}
while (num >= 2) {
num -= 2;
total++;
}
total += num;
return total;
}
六、效果展示
🏆本文收录于,华为OD机试2023(Java)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。