停车场车辆统计_100分_A/B卷复用_贪心策略

停车场车辆统计

题目描述:

  特定大小的停车场,数组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
输出:
	2
说明:
	1个货车占第1、2个车位
	第3、4个车位空
	1个卡车占第5、6、7个车位
	第8个车位空
	1个小车占第9个车位
	最少3辆车

解题思路:

遍历数组,统计连续元素值为 1 的长度,然后用贪心的思想,优先用多辆占用车位多的卡车来占车位,剩余的车位在尝试用占用车位第二多的货车来占车位、最后用小车来占用

代码:

public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);
	char[] chars = scanner.nextLine().replace(",", "").toCharArray();
	int car = 0;
	int length = chars.length;

	for (int left = 0; left < length; left++) {
		// 如果是1,表示有车占用
		if (chars[left] == '1') {
			int right = left + 1;
			
			// 统计被连续占用的车位数量
			while (right < length && chars[right] == '1') {
				right++;
			}

			// 先用卡车来占车位、再用货车占车用,最后用小车来占车位
			int size = right - left;
			car += (size / 3);
			size %= 3;
			car += (size / 2);
			size %= 2;
			car += size;
			left = right;
		}
	}

	System.out.println(car);
}

你可能感兴趣的:(华为OD机试真题(Java,A卷+B卷),华为od,华为,java)