LeetCode(605 种花问题)

花坛种花问题解析
本文详细解析了一道关于在花坛中种植花卉的算法题目,重点在于如何处理特殊情况,确保算法的正确性和效率。通过具体代码示例,阐述了在遍历过程中遇到不同状态时的处理策略,强调了全面考虑各种情况的重要性。

如题在这里插入图片描述
难度是简单,反而不可轻视,没注意特殊情况让我提交好几次才成功

public static boolean canPlaceFlowers(int[] flowerbed, int n) {
		int count = 0;	//可放入的总个数
		int num = 0;	//连续的0个数
		int flag = 0;  //是否出现1的标志
		for (int i = 0; i < flowerbed.length; i++) {
			if (flowerbed[i] == 0) {
				num++;
			} else {				//遍历1了计算前面可放入多少个
				if (flag == 0) {	//前面未出现1  即为00001情况 很显然奇数位可放,计算有多少对奇偶即可
					count = num / 2 + count;
					flag = 1;		//注意修改标志位
				} else {			//出现过1 很显然是1000001情况,此时偶数位可放,即计算除去一位后有多少对即可
					count = (num - 1) / 2 + count;
				}
				num = 0;    //记得计算后归零
			}
		}					//对应结尾为0时的情况
		if (flag == 0) {  	//从未出现零,即00000这种,直接判断有多少个奇数位可放
			count = (num + 1) / 2 + count;
		} else {			//对应10000,此时计算有多少个偶数位可放
			count = num / 2 + count;
		}
		return count < n ? false : true;
	}

很直观的写法,就是得全面考虑,结果在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值