假設你有一個很長的花壇,一部分地塊種植了花,另一部分卻沒有??墒?,花卉不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。
給定一個花壇(表示為一個數(shù)組包含0和1,其中0表示沒種植花,1表示種植了花),和一個數(shù) n 。能否在不打破種植規(guī)則的情況下種入 n 朵花?能則返回True,不能則返回False。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/can-place-flowers
著作權歸領扣網(wǎng)絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
解題思路:主要是數(shù)一下兩個1之間0的個數(shù)找一下其中的規(guī)律就好
| 1之間0的個數(shù) | 種花的個數(shù) |
|---|---|
| 0 | 0 |
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
| 5 | 2 |
| 6 | 2 |
找到的規(guī)律為當小于等于2的時候種不了花,大于2的時候種花的數(shù)量分兩種情況,奇數(shù)直接整除2,得到的商即為種花的數(shù)量,偶數(shù)減去1再做和奇數(shù)相同的操作。
有一點需要注意的是,兩邊需要做特殊的處理,兩邊2的時候就可以放一個花了,因此相對于中間常規(guī)的處理需要特殊注意。
class Solution {
public:
//有需要特殊考慮的地方
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
int flower_len = flowerbed.size();
int pre = -2;
int sum = 0;
for(int i = 0;i<flower_len;i++)
{
if(flowerbed[i]==1)
{
//進行種花數(shù)量計算
int zhong = i-pre-1;
if(zhong<=2)
{
zhong = 0;
}
else{
if(zhong%2==0)
{
zhong = zhong-1;
}
zhong = zhong/2;
}
sum += zhong;
pre = i;
}
}
int zhong = flower_len-pre;
if(zhong<=2)
{
zhong = 0;
}
else{
if(zhong%2==0)
{
zhong = zhong-1;
}
zhong = zhong/2;
}
sum += zhong;
if(sum>=n) return true;
return false;
}
};