LeetCode | Can Place Flowers

本文解析了CanPlaceFlowers算法题,介绍了如何在遵循特定规则下种植花朵,避免相邻花朵争抢资源的问题。通过遍历数组,检查并标记可种植位置,最终判断是否能成功种植指定数量的花朵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Can Place Flowers (Easy)

在这里插入图片描述
题目解析
题目给了我们一个数组flowerbed作为花盆,这个数组由诺干个1和0组成,1说明该位置种了植物,0说明每种,题目给出了一种规则:种花时,诺花盆里相邻的两个位置都种了花,它们会因为争抢水而死亡,所以种花时中间要留一个位置,例如[1,0,1]。题目给了我们一个变量n,代表接下来要种的花的数量,要求判断在花不会相邻的情况下能否完全把花种进给定的数组里。

思路
题目相对简单,我们只需要遍历数组,找到值为0的位置,在判断该位置的前后是否已经为1。如果是,则放弃这个位置继续寻找下一个值为0的位置;如果都不为1,则将这个位置值变为1(即种上花),然后记录一下已经种了几株花,当种下的花的数量一定等于题目给定的数量n的时候,则返回true,诺遍历完数组还没种完则返回false。

代码

bool canPlaceFlowers(vector<int>& flowerbed, int n) {
        if(n==0)return true;
        int sum=0;
        for(int i=0;i<flowerbed.size();i++){
            if(flowerbed[i]==0){
                if(i==0&&flowerbed[i+1]!=1){
                    sum++;
                    flowerbed[i]=1;
                }
                else if(flowerbed[i-1]!=1&&flowerbed[i+1]!=1){
                    sum++;
                    flowerbed[i]=1;
                }
                else if(flowerbed[i-1]!=1&&i==flowerbed.size()-1){
                    sum++;
                    flowerbed[i]=1;
                }
            }
            if(sum==n)
                return true;
        }
        return false;
    }

结果
在这里插入图片描述

小结
挺简单的一道题目,细心一点就能发现题目的规律,主要是要记得判断花盆的前后,特别是第一个位置和最后一个位置,还要记得将种上的位置置为1,要多注意一些细节的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值