Leetcode605. 种花问题

力扣题目系列:605. 种花问题 刷题系列博客链接:机试题目 目录 题目及示例 我的题解 题目及示例 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数n ,能否在不打破种植规则的情况下种入n朵花?能则返回 true ,不能则返回 false。 来源:力扣(LeetCode) 链接:https://leetcode-... 阅读详情

Every day a leetcode

题目来源:605. 种花问题

解法1:贪心

贪心思想:在不打破种植规则的情况下种入尽可能多的花,然后用“最大种植数量”和“所需要种植数量”进行大小比较即可。

设地块长度为n,种花的情况可分为4种:

  1. 全是地块全部没有花,则可以种植(n+1)/2朵花
  2. 若地块i上有原有的第一朵花,则i之前可以种植i/2朵花
  3. 若地块a和b(a<b)都有花,则a和b之间可以种植(b-a-2)/2朵花
  4. 若地块j上有原有的最后一株花,则i之前可以种植(n-j-1)/2朵花

我们用prev记录前一朵花的下标,初始化为-1。

使用变量count记录最大种植数量,初始化为0。

遍历一次数组,每次遇到一朵花(flowerbed[i] == 1)就视情况更新count,别忘了更新prev=i:

  • 若prev为-1,说明是第一朵花,则count+=i/2
  • 否则,说明要在prev和i之间种花,count+=(i-prev-2)/2

特殊情况:遍历一次数组后prev仍然为-1,说明全是地块全部没有花,则可以种植(n+1)/2朵花。否则prev为地块最后一朵花的位置,count+=(n-prev-1)/2。

特判:开始时比较n和(flowerbed.size()+1)/2,若n>(flowerbed.size()+1)/2,说明一定不能在不打破种植规则的情况下种入n朵花,返回false。

代码:

class Solution {
public:
    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
        if(n>(flowerbed.size()+1)/2) return false;
        int count=0;
        int prev=-1;
        for(int i=0;i<flowerbed.size();i++)
        {
            if(flowerbed[i] == 1)
            {
                if(prev<0) count+=i/2;
                else count+=(i-prev-2)/2;
                prev=i;
            }
        }
        if(prev<0) count=(flowerbed.size()+1)/2;
        else count+=(flowerbed.size()-prev-1)/2;
        return n<=count;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),需要遍历一次数组。

空间复杂度:O(1),只用到了count和prev这2个变量。

优化:

不需要分开判断第一朵花还是其他位置的花。

对于一段长度为zero的连续的0区间,其可以种的花的数量=(zero+1)/2,遍历一次数组做计算即可。

class Solution {
public:
    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
        if(flowerbed.size() == 0) return n == 0;
        if(n>(flowerbed.size()+1)/2) return false;
        int zero=0;//当前全0区段中连续0的数量
        zero++;//区间最左边没有花,可以认为在其左边存在一个虚无的0
        int count=0;//可以种的花的数量
        for(int i=0;i<flowerbed.size();i++)
        {
            if(flowerbed[i] == 0) zero++;
            else
            {
                //对于每一段连续0区间,可以种的花的数量=(区间长度-1)/2
                count+=(zero-1)/2;
                if(n<=count) return true;
                zero=0;
            }
        }
        zero++;//区间最右边没有花,可以认为在其右边存在一个虚无的0
        count+=(zero-1)/2;
        return n<=count;
    }
};


结果:

在这里插入图片描述

「算法」LeetCode 605. 种花问题(JavaScript版) 老规矩,题目链接:https://leetcode-cn.com/problems/can-place-flowers/ 这是一道简单题,解题最重要的部分就是抽象,将问题的解抽象为除法运算,求出两个1之间的0的个数,-1后/2并向下取整就能得到这两个1之间可以种的花的数目,最后做判断,即为题解。 本人想到两种解法,基本原理类似,都是寻找大于1的最大公因数,如果别的小伙伴还有更好的解决办法或是觉得我... 阅读详情

相关推荐

从XSA到Linux应用:Petalinux与Vitis的嵌入式开发全流程解析

本文详细解析了从XSA文件到Linux应用的嵌入式开发全流程,重点介绍了Petalinux与Vitis工具链的使用技巧和实战经验。通过XSA硬件描述、Petalinux工程搭建、系统镜像优化及Vitis开发配置等关键步骤,帮助开发者高效完成ZYNQ平台开发,解决常见问题并提升开发效率。

weixin_29195217的博客 192

出生年 (15 分) C语言 和 C++STL 两个代码

以下是我的思路: 以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。 输入格式: 输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要...

weixin_45653525的博客 3577

Halcon dyn_threshold详解

dyn_threshold 原型 dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 功能 利用局部阈值分割图像 参数列表 OrigImage (input_object):原始图像 ThresholdImage (input_object):处理后图像(一般采用滤波处理) RegionDynThresh (output_object):分割后区域 Offset (input_control):灰

ZiLiangQin的博客 1万+

leetcode605. 种花问题

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。三种情况需要判断,第一种,遍历到起始位置时,如果起始位置值为0且起始位置后一位也为0或者只有一个花坛,即起始位置也是末尾位置时,可以种。第三种,遍历到末尾位置时,如果前一个位置为0,或者只有一个花坛,可以种.输入:flowerbed = [1,0,0,0,1], n = 1。输入:flowerbed = [1,0,0,0,1], n = 2。时间O(n),空间O(1)

qq_44842918的博客 314

风光储互补微电网在偏远地区的应用实践:从建模到仿真全解析

本文深入解析了风光储互补微电网在偏远地区的应用实践,从系统设计到仿真建模全流程。通过Simulink等工具进行动态仿真,验证了系统在多种工况下的可靠性,并结合实际案例展示了其显著的经济和环保效益。文章为从业者提供了从技术路径到实施优化的全面指导。

weixin_29047545的博客 270

Debezium报错处理系列之二十一:Unable to connect: Communications link failure.The driver has not received any

Debezium报错系列之二十一:Unable to connect: Communications link failure.The driver has not received any。

zhengzaifeidelushang的博客 547

Leetcode605——种花问题

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。采用贪心算法,寻找最多可以种植多少朵花,也可以转化为求能够种花的空地有多少,假设下标。输入:flowerbed = [1,0,0,0,1], n = 1。输入:flowerbed = [1,0,0,0,1], n = 2。内与两花相邻的两个空地不能种花,因此区间。

bulling的博客 357

YOLO11涨点优化:loss优化 | 一种新的基于Wasserstein距离的小目标检测评估方法,助力小目标涨点

提出了一种新的基于Wasserstein距离的小目标检测评估方法,通过它们对应的高斯分布计算它们之间的相似性

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1016

605. 种花问题(简单题)

题目描述: 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 示例 1: 输入: flowerbed = [1,0,0,0,1], n = 1 ...

闭关修炼 611

【Python】秋招机考 —— 2025/8/27 华为 AI 方向

2025 华为 AI 秋招机考题目包含15道单选题、5道多选题和2道机器学习编程题,涵盖核心算法与数学知识。单选题考察了Softmax激活、Transformer位置编码、Jacobi迭代、大模型幻觉现象、特征向量、K-means聚类、矩阵秩、实对称矩阵性质、SVD分解、概率论等知识点。多选题涉及高斯-赛德尔迭代和朴素贝叶斯分类器。

一杯水果茶!足矣~ 840

(8-5)图像特征提取:基于LoG、DoG 和DoH 的斑点检测器

然后,根据给定的参数(标准差、尺度因子),通过调用cv2.GaussianBlur函数创建了两个不同尺度的高斯滤波器,并对图像进行滤波操作。然后,通过遍历DoG滤波器的每个像素,检测局部极值点,并将其添加到关键点列表中。然后,通过遍历DoH滤波器的每个像素,检测局部极值点,并将其添加到关键点列表中。接下来,通过遍历滤波器的每个像素,检测局部极值点,并将其添加到关键点列表中。DoH是一种基于Hessian矩阵的特征检测方法,通过计算Hessian矩阵的行列式来检测图像中的斑点。:实现DoH斑点检测器。

码农三叔 1606

Leetcode刷题—— 种花问题

Leetcode刷题—— 种花问题

weixin_44814196的博客 610

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

力扣605 种花问题

力扣605 种花问题 题干 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 示例 输入: flowerbed = [1,0,0,0,1], n = 1 输出: True 输入: flowerbed = [1,0,0,0,1], n = 2

Castle Yeager 成长之路 501

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣 605、种花问题

力扣 605、种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 示例 1: 输入: flowerbed = [1,0,0,0,1], n = 1 输出: True 示例 2: 输入: flowerbed = [1,0,0,0,1], n = 2

qq_43771439的博客 212

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

力扣 leetcode 605. 种花问题 (python)

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。 Example1: 输入:flowerbed = [1,0,0,0,1], n = 1 输出:true Excxample2: 输入:flowerbed =

weixin_50791900的博客 879

力扣简单题:605:种花问题

力扣简单题:605:种花问题话不多说上问题和代码题目讲讲我的思路优化 话不多说上问题和代码 题目 讲讲我的思路 - 一开始想到的是遍历循环接收到的数组,然后根据当前位置去判断下一个种花点,于是就有了下面的代码, - 以已经种花的点(也就是数组中为1的元素)当做坐标,去判断后面的点 /** * @param {number[]} flowerbed * @param {number} n * @return {boolean} */ var canPlaceFlowers = function(f

weixin_44051284的博客 484

力扣Leetcode之Java解题605种花问题

leetcode刷题

小李子Lee 292

leetcode 605. 种花问题

【题目】605. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 示例 1: 输入: flowerbed = [1,0,0,0,1]...

Sophia_fez的博客 336

Leetcode605. 种花问题(C语言)

Leetcode605. 种花问题(C语言) 算法-贪心思想:算法与数据结构参考 题目: 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。例: 输...

jeanlu的博客 1257

LeetCode-605.种花问题

朵花,核心是算出花坛里能额外种花的空位数量。我们通过遍历花坛数组,依据 “花不能相邻” 规则,检查每个空位能否种花,统计可种花的空位总数,再和。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。依次查看每个位置,判断能否种花。对于数组首尾位置,特殊处理,首位置只需右侧为。要判断能否在花坛里按规则种入。若某位置满足条件,将其标记为已种花(置为。,能否在不打破种植规则的情况下种入。,且左右相邻位置(若存在)也为。中不存在相邻的两朵花。

m0_75107602的博客 441

leetcode 605 种花问题

描述 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 示例 1: 输入: flowerbed = [1,0,0,0,1], n = 1 输出:...

yrk0556的博客 254

LeetCode605. 种花问题(GIF图解)

LeetCode605. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 示例 1: 输入: flowerbed = [1,0,0,...

weixin_43294413的博客 411

Leetcode 605.种花问题(简单)

public class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int i = 0, count = 0; while (i < flowerbed.length) { if (flowerbed[i] == 0...

Perrysky的博客 425

leetcode 605 种花问题(保姆级解析)

保姆级解析leetcode算法题605 种花问题

qq_34531540的博客 1223

Leetcode 605 种花问题

Leetcode 605 种花问题 问题重述 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。 示例 1: 输入:flowerbed = [1,0,0,0,1], n = 1输出:true 示例 2: 输入:fl

UPC YR的博客 208
上一篇: 《C++ Primer Plus》(第6版)中文版
下一篇: Effective C++ | 00 Introduction
UestcXiye
博客等级 码龄8年 9029粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值