0%

种花问题

题目描述

  你有一个长花坛,其中有一些种植了花朵,有一些没有。花坛里的种的花必须要有间隔(即不能相邻而种)

输入输出样例

Input: flowerbed = [1,0,0,0,1], n = 1
Output: true

  在这个样例中,flowerbed[2]左右没有花朵,可以种植一朵花,符合题目种一朵花的要求,即输出true # 题解   对于这题我们先考虑第一朵花怎么种,首先头和尾需要优先进行处理。我们可以对这个数组首尾都添加一个0,从而确定首尾。那我们就可以从原数组的第一个开始进行判断(i=1),到原数组的最后一个(i=len-1)。根据题目要求,种花的条件是左右都没有花且即将要种的地是空闲的。所以就要求{i-1,i,i+1}都为0时,计数的才会自增1。循环结束,因为首尾添加的0可能会导致花会被多种,因此,(计数>=要求的花)就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
flowerbed.push_back(0);
flowerbed.insert(flowerbed.begin(),0);

int i = 1,sum = 0,len = flowerbed.size();
while (i < len-1) {
if (flowerbed[i]+flowerbed[i+1]+flowerbed[i-1] == 0)
++sum,++i;
++i;
}

return sum >= n;
}
};