刷爆力扣之种花问题

news2024/9/22 21:25:04

刷爆力扣之种花问题

HELLO,各位看官大大好,我是阿呆 🙈🙈🙈

今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜

请添加图片描述

该专栏按照不同类别标签进行刷题,每个标签又分为 Easy、Medium、Hard 三个等级 👊👊👊

本部分所有题目均来自于LeetCode 网,并于每道题目下标明具体力扣网原题链接 🏃🏃🏃

OK,兄弟们,废话不多直接上题,冲冲冲 🌞🌞🌞


一 🏠 题目描述

605. 种花问题

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

给你一个整数数组 flowerbed 表示花坛,由若干 01 组成,其中 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
输出:false

提示:

  • 1 <= flowerbed.length <= 2 * 104
  • flowerbed[i]01
  • flowerbed 中不存在相邻的两朵花
  • 0 <= n <= flowerbed.length

二 🏠破题思路

2.1 🚀 关键信息

解决问题第一步,当然先提取题目字面上的关键信息 😎😎😎

花不能种植在相邻的地块上,即

当 0 在数组两端时,只需要两个零即可可以栽上一棵花

当 0 不在数组两端时,需连续出现三个 0 才可以栽上一棵花 🌸🌸🌸


提取完题目中的关键信息后,直接进入第二阶段,思路整理 😃😃😃


2.2 🚀 思路整理

防御式编程法

防御性编程作用在于,引入额外条件以忽略临界条件下与正常状态的不同,以该题为例 🌹🌹🌹

数组两端各增加一个 0,任意位置处只要连续出现三个 0 就可以栽上一棵花。因为至少三个 0 才可以种花(不在两边的情况下),因此在数组两端各加一个 0 ,这样处理可以不需要考虑边界条件

当临界值为1 时,加上 0 对结果无影响;当临界值为 0 时,因处于临界状态时,两个 0 正好等效于中间状态下的三个 0 (即可种一颗树),故该题可使用防御式编程法可规避掉复杂临界状态的分支判断 🌺🌺🌺


整理完解题思路后,直接进入第三阶段,代码实现 😃😃😃


三 🏠 代码详解

3.1 🚀 代码实现

按照我们刚才的破题思路,直接代码走起来 👇👇👇👇

 bool canPlaceFlowers(vector<int>& flowerbed, int n) {
     int len = 1, ans = 0; //认为左边界提供 1 个 0
     for (auto &i : flowerbed) {
         if (i) {	//为 1 , 此处已种花
             ans += (len - 1) / 2; //len 个 0 可种 (len - 1) / 2 朵花
             len = 0;
         } else {	//为 0 , 此处为空地
             ++len;
         } 
     }
     ans += len / 2; // 处理 0 尾,认为右边界提供一个 0
     return ans >= n; //返回比较结果
 }

3.2 🚀 细节解析

看完 👀👀👀 全注释版的代码实现后,相信看官大大对整体逻辑已经是大写的 OK 了 😃😃😃

那么我们挖掘上述实现的晦涩细节 😖😖😖 进行解析,直接开干,走起来 👇👇👇👇

ans += (len - 1) / 2; //len 个 0 可种 (len - 1) / 2 朵花

使用数学归纳 . . . ,4 个 0 可种 1 朵,5 个 0 可种 2 朵,6 个 0 可种 2 朵,7 个 0 可种 3 朵,. . .

易知当 len 为奇数且每隔两个数可种花的数量加一,即推导出 len 个 0 可种 (len - 1) / 2 朵花 🐌🐌🐌


ans += len / 2; // 处理 0 尾,认为右边界提供一个 0

使用数学归纳 . . . ,2 个 0 可种 1 朵,3 个 0 可种 2 朵,4 个 0 可种 2 朵,5 个 0 可种 2 朵,. . .

易知对于以 0 结尾的情况,当 len 为偶数且每隔两个数可种花的数量加一,即推导出 len 个 0 可种 len / 2 朵花 🐳🐳🐳


四 🏠 心路历程

为方便各位看官大大了解博主真实刷题过程,我把当时状态纯纯真实还原,记录在心路历程这一小节,不感兴趣的小伙伴可以直接跳过哈

博主在第一阶段提取 🚀 关键信息没有问题,在第二阶段 🚀 思路整理未联想到使用防御式编程法

代码实现使用了分类讨论法,分成最左端,中间,最右端三种情况 😶😶😶 ,代码如下 👇👇👇👇

bool canPlaceFlowers(vector<int>& flowerbed, int n) {
    int len = flowerbed.size();
    if (len == 1) {
        if (flowerbed[0] == 0) return n > 1 ? false : true;
        else return n > 0 ? false : true;
    } 

    int count = 0;
    for (int i = 0; i < len; ++i) {
        if (flowerbed[i] == 0) {
            if (i == 0) { //索引位置处于最左端
                if (flowerbed[i + 1] == 0) flowerbed[i] = 1, ++count;
            } else if (i == len - 1){ //索引位置处于最右端
                if (flowerbed[i - 1] == 0) flowerbed[i] = 1, ++count;
            } else {	//索引处于中间
                if (flowerbed[i + 1] == 0 && flowerbed[i - 1] == 0) flowerbed[i] = 1,++count;
            }
        }
    }

    return n > count ? false : true;
}

五 🏠 结语

身处于这个浮躁的社会,却有耐心看到这里,你一定是个很厉害的人吧 👍👍👍

如果各位看官大大觉得文章有帮助的话,别忘了点赞 + 关注哦,你们的鼓励就是我最大的动力

博主还会不断更新更优质的内容,加油吧!技术人! 💪💪💪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv7 Backbone| 原文源码详解

YOLOv7 Backbone结构详解在之前的文章中&#xff0c;我们以YOLOv5为对象&#xff0c;详细解剖了一只麻雀的内部构造&#xff0c;包括anchor机制、backbone的结构、neck的结构和head的结构。在本篇文章中&#xff0c;我们将以YOLOv7v0.1版本的代码为目标&#xff0c;结合作者团队…

骨骼动画——2D Animation

1、2D骨骼动画 传统的序列帧动画为了达到好的动画效果&#xff0c;理论上来说&#xff0c;图片越多&#xff0c;动作越流畅&#xff0c;往往需要较多的美术资源&#xff0c;虽然效果好但是资源占用较多 而2D骨骼动画是利用3D骨骼动画的制作原理进行制作的&#xff0c;将一张2…

借助 ChatGPT 编写的 libbpf eBPF 工具开发实践教程: 通过例子学习 eBPF

这是一个基于 CO-RE&#xff08;一次编译&#xff0c;到处运行&#xff09;的 libbpf 的 eBPF 的开发教程&#xff0c;提供了从入门到进阶的 eBPF 开发实践指南&#xff0c;包括基本概念、代码实例、实际应用等内容。我们主要提供了一些 eBPF 工具的案例&#xff0c;帮助开发者…

大学免费查题接口

大学免费查题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

设计模式-day02

4&#xff0c;创建型模式 4.2 工厂模式 4.2.1 概述 需求&#xff1a;设计一个咖啡店点餐系统。 设计一个咖啡类&#xff08;Coffee&#xff09;&#xff0c;并定义其两个子类&#xff08;美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】&#xff09;&#xff1b;再设…

蓝牙学习六(GATT)

1.简介 GATT-Generic Attribute profle-通用属性配置文件。GATT层是传输真正数据所在的层。包括了一个数据传输和存储架构以及其基本操作。GATT用来规范attribute中的数据内容&#xff0c;并运用group&#xff08;分组&#xff09;的概念对attribute进行分类管理。没有GATT&…

查题接口系统

查题接口系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; 题库…

Bootstrap-jqgrid学习(十六)

jqgrid网站地址&#xff1a; jqGrid demos-jqGrid实例-中文-mn886.nethttps://blog.mn886.net/jqGrid/ 表格属性 分页属性&#xff1a; pagerstring定义翻页用的导航栏&#xff0c;必须是有效的html元素。翻页工具栏可以放置在html页面任意位置 显示总条数 viewrecordsbo…

#分支语句详解

第一章 C语言&#xff1a;分支语句 文章目录第一章 C语言&#xff1a;分支语句前言1、什么是语句&#xff1f;2.分支语句&#xff08;选择结构&#xff09;2.1 if语句2.1.1 悬空else2.1.2 if书写形式的对比2.2 switch语句2.2.1 在switch语句中的 break2.2.2 default子句2.2.3 练…

基于频谱的GCN的数学原理

参考链接&#xff1a;如何理解GCN&#xff1f;知乎回答&#xff1a;从热传导模型到GCN从CNN到GCN的联系与区别——GCN从入门到精&#xff08;fang&#xff09;通&#xff08;qi&#xff09; GCN问题本质 图中的每个结点无时无刻不因为邻居和更远的点的影响&#xff0c;而在改…

基于linux的操作系统的通用启动流程(一)

这篇我们讲解linux的通用启动流程,按照我们一贯的方式总分总的节奏,因为后面的每个子系统也很大,所以我们讲解子系统的时候也是按照总分总的方式。注意因为基于linux的各式各样的操作系统绝对不下100个,像嵌入式,然后我们的桌面有fedora,redhat,centos,debian,ubuntu以…

如何定位线上CPU占用过高的问题

系列文章目录 文章目录系列文章目录前言一、定位CPU的流程是什么&#xff1f;二、实操1.测试代码样例2.定位问题实践过程总结前言 一、定位CPU的流程是什么&#xff1f; 项目上线&#xff0c;CPU飙高不下&#xff0c;触发报警&#xff0c;如何定位排查问题。有两种办法1、通过…

JVM内存布局及GC原理

“java的内存布局以及GC原理”是java开发人员绕不开的话题&#xff0c;也是面试中常见的高频问题之一。 java发展历史上出现过很多垃圾回收器&#xff0c;各有各的适应场景&#xff0c;很多网上的旧文章已经跟不上最新的变化。本文详细介绍了java的内存布局以及各种垃圾回收器的…

著名运动员刘诗雯从政,迎来人生高光时刻,张继科还般配吗

曾经有这么一句话&#xff1a;中国男足谁都踢不过&#xff0c;中国乒乓球谁都打不过。也间接地说明了国球队伍人才济济。在众多优秀乒乓球队员当中&#xff0c;刘诗雯最近相当耀眼&#xff0c;听说她已经高升当官了&#xff0c;也和张继科拉开了距离。 据悉&#xff0c;公元202…

Java高效率复习-数据类型和运算符[Java]

第一篇关于JavaSE内容的文章 文章的风格比较涣散&#xff0c;但是都是干货&#xff0c;关于Java系列的&#xff0c;还有就是&#xff0c;我认为只有MySQL基础和JavaSE基础是可以做到可操作性和可执行性较强的。 如果像JavaWeb或者SSM框架这些&#xff0c;光看文章你是根本执行…

tensorflow的GPU加速计算

参考 tensorflow的GPU加速计算 - 云社区 - 腾讯云 一、概述 tensorflow程序可以通过tf.device函数来指定运行每一个操作的设备&#xff0c;这个设备可以是本地的CPU或者GPU&#xff0c;也可以是某一台远程的服务器。tensorflow会给每一个可用的设备一个名称&#xff0c;tf.…

PaO2/FiO2在临床中的应用 氧合指数

主任提问:患者呼吸衰竭时的“氧合指数”大约多少?如何计算?_腾讯新闻 (qq.com) 在 ARDS 柏林定义中,诊断低氧血症需要 PaO2/FiO2≤ 300 mmHg,并可以分为轻中重三个等级(下表)。 ARDS 患者的 PaO2/FiO2越低,死亡率越高,其中重度 ARDS 死亡率高达 45%。需要注意这里 …

生产报工管理系统可以帮助企业解决哪些问题?

随着时代的变迁和信息化技术的发展&#xff0c;市场对制造企业在产品价格、质量以及生产成本等方面提出了更高的要求&#xff0c;车间生产也逐渐向着实时化、透明化和可视化方向发展。其中产报工与跟踪是生产管理中重要的环节&#xff0c;自然是不可缺少信息化的。 企业在报工…

Linux基本命令

目录操作 格式&#xff1a;指令 -[参数] [目录] 1. pwd (Print Working Direcotry) 查看当前工作路径 2. cd (Change Direcotry) 改变 shell 工作目录 3. ls (List Files) 列出当前目录下的文件和目录 ls -[参数] [目录] ls的参数均是短命令&#xff0c;可以使用-后添…

经过物联网技术的设备改造有“大脑”,更智能

物联网是通讯网与互联网的拓展应用和网络延伸&#xff0c;通过网络传输互联&#xff0c;进行计算、处理和知识挖掘&#xff0c;实现人与物、物与物的信息交互和无缝链接&#xff0c;达到对物理世界的实时控制、精确管理和科学决策是目的。而物联网设备是一种非标准计算设备&…