LeetCode-04-种花问题
LeetCode算法题:种花问题。
题目
LeetCode:LeetCode 75 - 学习计划-04-种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干
0 和 1 组成,其中 0
表示没种植花,1 表示种植了花。另有一个数 n
,能否在不打破种植规则的情况下种入 n 朵花?能则返回
true ,不能则返回 false 。
思路
花不能相邻,则可用连续三块地无花进行分析。即i-1,i,i+1均为空。
但需考虑几个特殊情况:
- 待插花数n=0
- 花坛长度为1、2或其他长度(可直接判断插花或不插)
代码
方案A
分别考虑特殊情况和长度大于2时的通用情况,遍历所有情况。
1 | bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) { |
方案B
<!--块级封装-->
<center> <!--将图片和文字居中-->
<img src="2025-07-24-LeetCode-04-Can_Place_Flowers/slip_window.jpg"
alt="image can't load."
style="zoom:100%"/><!-- alt内为提示词-->
滑动窗逻辑<!--标题-->
</center>
使用滑动窗口逻辑,设定
- 起始左窗口
left = -1,right = 0。 - 检索到right内的值为1时,刷新左右边界值
- 左右边界间距大于3时,可插入一个
1 | bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) { |
————————— End —————————
星星之火