美文网首页
leetcode 种花问题

leetcode 种花问题

作者: 华小锐 | 来源:发表于2019-07-13 15:11 被阅读0次

    假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
    给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/can-place-flowers
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    解题思路:主要是数一下两个1之间0的个数找一下其中的规律就好

    1之间0的个数 种花的个数
    0 0
    1 0
    2 0
    3 1
    4 1
    5 2
    6 2

    找到的规律为当小于等于2的时候种不了花,大于2的时候种花的数量分两种情况,奇数直接整除2,得到的商即为种花的数量,偶数减去1再做和奇数相同的操作。
    有一点需要注意的是,两边需要做特殊的处理,两边2的时候就可以放一个花了,因此相对于中间常规的处理需要特殊注意。

    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)
                {    
                    //进行种花数量计算
                    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;
        }
    };
    

    相关文章

      网友评论

          本文标题:leetcode 种花问题

          本文链接:https://www.haomeiwen.com/subject/zpfmkctx.html