题目
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
Note:
1. The input array won't violate no-adjacent-flowers rule.
2. The input array size is in the range of [1, 20000].
3. n is a non-negative integer which won't exceed the input array size.
题意
数组操作
题解
连续三个0可以插一个1,先算出所给数组可以插入1的个数sum,再判断所给n是否小于等于sum.
python代码
class Solution(object):
def canPlaceFlowers(self, flowerbed, n):
"""
:type flowerbed: List[int]
:type n: int
:rtype: bool
"""
if len(flowerbed)==1 and flowerbed[0]==0:#注意当数组长度为1时,要单独考虑
return n<=1
sum = 0
for i in range(0, len(flowerbed)):
if i==0 and flowerbed[0]==0 and flowerbed[1]==0:#首元素
sum = sum + 1
flowerbed[i] = 1 #注意更新数组元素
elif i==(len(flowerbed)-1) and flowerbed[len(flowerbed)-2]==0 and flowerbed[len(flowerbed)-1]==0:#末尾元素
sum = sum + 1
flowerbed[i] = 1
else:#中间元素
if flowerbed[i]==0 and flowerbed[i-1]==0 and flowerbed[i+1]==0:
sum = sum + 1
flowerbed[i] = 1
return sum>=n
C++代码
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
if(flowerbed.size()==1 && flowerbed[0]==0){
return n<=1;
}
int sum = 0;
for(int i=0; i<flowerbed.size(); i++)
{
if(i==0 && flowerbed[0]==0 && flowerbed[1]==0){
sum++;
flowerbed[i] = 1;
}
else if(i==(flowerbed.size()-1) && flowerbed[flowerbed.size()-2]==0 && flowerbed[flowerbed.size()-1]==0){
sum++;
flowerbed[i] = 1;
}
else {
if(flowerbed[i]==0 && flowerbed[i-1]==0 && flowerbed[i+1]==0){
sum++;
flowerbed[i] = 1;
}
}
}
return sum>=n;
}
};