当前位置:   article > 正文

停车场车辆统计_100分_A/B卷复用_贪心策略_python判断最少能停多少辆车?

python判断最少能停多少辆车?

停车场车辆统计

题目描述:

  特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。
  车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3)。
  统计停车场最少可以停多少辆车,返回具体的数目。

输入输出描述:

输入描述:

  整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。

输出描述:

  整型数字字符串,表示最少停车数目。

示例1:

输入:
	1,0,1
输出:
	2
说明:
	1个小车占第1个车位
	第二个车位空
	1个小车占第3个车位
	最少有两辆车
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

示例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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

解题思路:

遍历数组统计连续元素值为 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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/192044
推荐阅读
相关标签
  

闽ICP备14008679号