leetcode 種花問題

假設你有一個很長的花壇,一部分地塊種植了花,另一部分卻沒有??墒?,花卉不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。
給定一個花壇(表示為一個數(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;
    }
};
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容