思路:
1.将能种的地方都种上树,每种一个树n--,最后比较n与0的值,类似于回溯思想,如果种在不能种的位置再拔掉
2.注意判断边界条件
代码如下,时间复杂度O(n)
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
boolean fz = false;//如果种了,变为true
boolean isOne = false;//判断上一个是否为1,如果上一个种树了,那也当做1处理
for(int i=0;i<flowerbed.length;i++)
{
if(flowerbed[i]==0)
{
if(i==0)
{
n--;
fz=true;
}else
{
if(isOne == true)
{
isOne=false;
continue;
}else if(fz==true){
isOne=false;
fz=false;
continue;
}else{
n--;
fz=true;
}
}
}else
{
if(fz==true)
{
n++;
fz=false;
}
isOne = true;
}
}
if(n<=0)
{
return true;
}
return false;
}
}
本文介绍了一道经典的算法题目——在限定条件下尽可能多地在花坛中种植花朵。通过详细的伪代码展示了解决该问题的一种高效算法实现,并分析了其时间复杂度为O(n)。文章重点在于如何运用回溯思想进行逻辑判断与状态更新。
1100

被折叠的 条评论
为什么被折叠?



