假设我们有一个长长的花坛,其中种植了一些地块,而有些则是空的。现在有一个限制,不能在相邻的地块上种花,它们会争夺水,而且都死了。因此,如果我们有一个花坛,用包含0和1的数组表示,则0表示空白,1表示填充,并且还给出了数字n,我们必须检查是否可以在其中种植n朵新花而不违反否定原则。是否有相邻的花规则。
因此,如果输入像花圃= [1,0,0,0,1],n = 1,则输出将为True
为了解决这个问题,我们将遵循以下步骤-
如果花床的大小<n,则-
返回假
如果花床的大小等于1,花床[0]的大小等于0,n的值等于1,则-
返回真
对于初始化i:= 0,当i <花坛的大小时,更新(将i增加1),执行-
返回真
如果我等于0,则-
否则,当我等于花坛的大小-1时,则-
否则,当flowerbed [i]等于0且flowerbed [i + 1]等于0且flowerbed [i-1]等于0时,则-
花坛[0]:= 1
(将n减1)
如果flowerbed [i]等于0,而flowerbed [1]等于0,则-
花坛[i]:= 1
(将n减1)
如果flowerbed [i]等于0,并且flowerbed [i-1]不等于1,则-
花坛[i]:= 1
(将n减1)
如果n> 0,则-
如果n等于0,则-
如果n等于0,则-
返回真
返回假
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
if (flowerbed.size() < n)
return false;
if (flowerbed.size() == 1 && flowerbed[0] == 0 && n == 1)
return true;
for (int i = 0; i < flowerbed.size(); i++) {
if (n > 0) {
if (i == 0) {
if (flowerbed[i] == 0 && flowerbed[1] == 0) {
flowerbed[0] = 1;
n--;
}
}
else if (i == flowerbed.size() - 1) {
if (flowerbed[i] == 0 && flowerbed[i - 1] != 1) {
flowerbed[i] = 1;
n--;
}
}
else if (flowerbed[i] == 0 && flowerbed[i + 1] == 0 && flowerbed[i - 1] == 0) {
flowerbed[i] = 1;
n--;
}
}
if (n == 0) {
return true;
}
}
if (n == 0) {
return true;
}
return false;
}
};
main(){
Solution ob;
vector<int> v = {1,0,0,0,1};
cout << (ob.canPlaceFlowers(v, 1));
}{1,0,0,0,1}, 1输出结果
1