假設(shè)你有一個很長的花壇旱幼,一部分地塊種植了花查描,另一部分卻沒有“芈保可是冬三,花卉不能種植在相鄰的地塊上,它們會爭奪水源缘缚,兩者都會死去勾笆。
給定一個花壇(表示為一個數(shù)組包含0和1,其中0表示沒種植花桥滨,1表示種植了花)窝爪,和一個數(shù) n 。能否在不打破種植規(guī)則的情況下種入 n 朵花齐媒?能則返回True蒲每,不能則返回False。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/can-place-flowers
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有喻括。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)邀杏,非商業(yè)轉(zhuǎn)載請注明出處。
解題思路:主要是數(shù)一下兩個1之間0的個數(shù)找一下其中的規(guī)律就好
1之間0的個數(shù) | 種花的個數(shù) |
---|---|
0 | 0 |
1 | 0 |
2 | 0 |
3 | 1 |
4 | 1 |
5 | 2 |
6 | 2 |
找到的規(guī)律為當(dāng)小于等于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)
{
//進(jìn)行種花數(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;
}
};