题目描述
Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die.
Given a flowerbed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty), and a number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.
样例
Example 1:
Input: flowerbed = [1,0,0,0,1], n = 1
Output: True
Example 2:
Input: flowerbed = [1,0,0,0,1], n = 2
Output: False
算法1
(枚举) $O(n)$
碰到连续三个0就放一朵花,update花的数量直至为零返回true
时间复杂度
O(n)遍历一次
O(1)
参考文献
C++ 代码
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
for(int i=0;i<flowerbed.size();i++)
{
if(n==0) return true;
if(flowerbed[i]==0)
{
int next=(i==flowerbed.size()-1)?0:flowerbed[i+1];
int pre=(i==0)?0:flowerbed[i-1];
if(next+pre==0)
{
flowerbed[i]=1;
n--;
}
}
}
return n<=0;
}
};