
一、题目描述
特定大小的停车场,数组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机考。专栏会持续更新,每天在线答疑。


















