其他分享
首页 > 其他分享> > 605. 种花问题

605. 种花问题

作者:互联网

假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 。能否在不打破种植规则的情况下种入 朵花?能则返回True,不能则返回False。

示例 1:

输入: flowerbed = [1,0,0,0,1], n = 1
输出: True

示例 2:

输入: flowerbed = [1,0,0,0,1], n = 2
输出: False

注意:

  1. 数组内已种好的花不会违反种植规则。
  2. 输入的数组长度范围为 [1, 20000]。
  3. n 是非负整数,且不会超过输入数组的大小。
    class Solution {
    public:
        bool canPlaceFlowers(vector<int>& flowerbed, int n) {
            //花坛长度为零或者负数,不能种植
            if(flowerbed.size()<=0)
                return 0;
            //不种植就是真
            if(n<=0)
                return 1;
            //花坛长度为1,种植为1时,原来未种植
            if(flowerbed.size()==1)
            {
                if(flowerbed[0]==0 && n<=1)
                    return 1;
                else
                    return 0;
            }
            int i;
            //花坛长度大于等于2时,前两个为0
            if(flowerbed[0]==0 && flowerbed[1]==0)
            {
                flowerbed[0]=1;
                n--;
            }
            //相邻三个为0才可以种植,种植后n减1,中间位置变为1,表示种植
            for(i=1;i<flowerbed.size()-1;i++)
            {
                if(flowerbed[i-1]==0 && flowerbed[i]==0 && flowerbed[i+1]==0)
                {
                    n--;
                    flowerbed[i]=1;
                }
            }
            //最后两个全为0,最后一个可以种植
            if(flowerbed[i-1]==0 && flowerbed[i]==0)
                n--;
            if(n<=0)
                return 1;
            else
                return 0;
        }
    };

     

标签:605,示例,种植,花坛,flowerbed,问题,种花,数组,输入
来源: https://blog.csdn.net/qq_23283325/article/details/90082001