假设我们有一个长长的花坛,其中种植了一些地块,而有些则是空的。现在有一个限制,不能在相邻的地块上种花,它们会争夺水,而且都死了。因此,如果我们有一个花坛,用包含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