leetcode:种花问题

news2024/11/24 6:44:31

种花问题

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

给你一个整数数组 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

跳格子解法

​ 题目要求是否能在不打破规则的情况下插入n朵花,与直接计算不同,采用“跳格子”的解法只需遍历不到一遍数组,处理以下两种不同的情况即可:

​ 【1】当遍历到index遇到1时,说明这个位置有花,那必然从index+2的位置才有可能种花,因此当碰到1时直接跳过下一格。 【2】当遍历到index遇到0时,由于每次碰到1都是跳两格,因此前一格必定是0,此时只需要判断下一格是不是1即可得出index这一格能不能种花,如果能种则令n减一,然后这个位置就按照遇到1时处理,即跳两格;如果index的后一格是1,说明这个位置不能种花且之后两格也不可能种花(参照【1】),直接跳过3格。

​ 当n减为0时,说明可以种入n朵花,则可以直接退出遍历返回true;如果遍历结束n没有减到0,说明最多种入的花的数量小于n,则返回false。

时间复杂度:O(n)

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        i, length = 0, len(flowerbed)
        while i < length and n > 0:#遍历到最后一个元素和n减到0结束循环
            if flowerbed[i] == 1:
                i += 2#跳两格才可能可以种花
            elif flowerbed[i] == 0:
                if i + 1 == length:#如果是最后一个元素
                    n -= 1#种一朵
                    i += 1
                elif flowerbed[i+1] == 0:#如果后一格没种花
                    n -= 1#种一朵
                    i += 2
                elif flowerbed[i+1] == 1:#后一个已经种了花
                    i += 3#跳三格才可能可以种花
        return n == 0#如果n减到0则空位够种花,反之不够种

举例解释:

image-20230704112714033

优化后(时间复杂度不变但更具Python风格)

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        length = len(flowerbed)
        flowerbed = [0] + flowerbed + [0]  # 对边缘进行填充以减少边缘情况
        for i in range(1, length + 1):  # 从索引 1 开始,直到 length + 1,因为有填充
            if flowerbed[i-1:i+2] == [0, 0, 0]:  # 检查前一个、当前和下一个位置是否可以种植花
                flowerbed[i] = 1  # 种植一朵花
                n -= 1  # 减少数量
        return n <= 0

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

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

相关文章

Go语言网络编程:TCP粘包问题——Go实现封包拆包

一&#xff1a;TCP粘包介绍 1.1 TCP介绍 如上图&#xff0c;TCP具有面向连接、可靠、基于字节流三大特点。 字节流可以理解为一个双向的通道里流淌的数据&#xff0c;这个数据其实就是我们常说的二进制数据&#xff0c;简单来说就是一大堆 01 串。纯裸TCP收发的这些 01 串之间…

对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈下篇

前言 在上篇文章中&#xff0c;我们探讨了如何创造一个能够进行Connect4的对弈大脑。简单的介绍了几种对弈算法&#xff0c;例如极小化极大算法&#xff0c;Alpha-Beta剪枝算法等&#xff0c;最关键的是目前最流行的神经网络算法和深度学习。神经网络算法&#xff0c;让计算机…

Dubbo zookeeper

1、RPC全称为remote procedure call&#xff0c;即远程过程调用。Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用 2、Dubbo提供了三大核心能力&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均衡&#xff0c;以及服务自动注册和发现。 3、 Du…

Google SEO内容指南:您实现最大自然流量的路线图

欢迎来到令人兴奋的SEO内容世界&#xff01; SEO就像拥有一个秘方&#xff0c;结合了创造力、策略和技术诀窍的正确成分&#xff0c;使您的内容在广阔的数字环境中大放异彩。 但最好的是 – SEO内容并不是要牺牲您独特的声调或损害您的创造力。相反&#xff0c;它是关于了解搜…

从0开始,手写MySQL数据管理器DM

说在前面 从0开始&#xff0c;手写一个MySQL的学习价值在于&#xff1a; 可以深入地理解MySQL的内部机制和原理&#xff0c;MySQL可谓是面试的绝对重点和难点&#xff0c; 尼恩曾经指导过的一个7年经验小伙&#xff0c;凭借精通MySQL 搞定月薪40K。 从而更好地掌握MySQL的使…

六、Eureka服务发现(源码分析)

1 什么是服务发现 根据服务名称发现服务的实例过程客户端会在本地缓存服务端的列表拉取列表是有间隔周期的 &#xff08;导致服务上线 客户端不能第一时间感知到 &#xff08;可以容忍&#xff09;&#xff09;其实每次做服务发现 都是从本地的列表来进行的 2 测试服务发现 …

哆啦A梦和小猪佩奇(Python实现)

目录 1 哆啦A梦 2 小猪佩奇 3 Python代码实现&#xff08;哆啦A梦&#xff09; ​ 4 Python代码实现&#xff08;小猪佩奇 &#xff09; 1 哆啦A梦 “只要把愿望系在竹竿上请求月亮女神&#xff0c;心愿便能达成”。我超喜欢这句话。 哆啦A梦的创造要追溯到1969年的某个…

【PHP语言-PDO接口】PDO接口执行脚本操作数据库

目录 前言&#xff1a; 一、 PDO简介 二、 PDO对象方法 前言&#xff1a; PDO&#xff1a;数据库抽象层 简介&#xff1a;PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口&#xff0c;PDO解决了数据库连接不统一的问题。 一、 PDO简介 1、PDO简介 &#xff08;1…

iview 文档中的三个提示彩蛋

第一个彩蛋 在iview的Collapse 折叠面板最底下&#xff0c;简洁模式的第二个&#xff0c;双击数字 19840124 是一个日期&#xff0c;也就是 1984 年 1 月 24 日&#xff0c;这一天&#xff0c;苹果发布了麦金塔电脑&#xff08;Macintosh&#xff09;&#xff0c;对于苹果来说…

当量因子法、InVEST、SolVES模型等多技术融合在生态系统服务功能社会价值评估中的应用

第一章 理论基础与研究热点分析 1. 生态系统服务与生态系统服务价值介绍 ​ 2. 生态系统服务价值研究方法 3. 生态系统服务价值研究热点 Citespace文献可视化分析 VOSviewer文献可视化分析 第二章 空间数据来源及预处理 1. 空间数据简介 2. ArcGIS Pro数据采集与分析 数…

【Python】matplotlib.pyplot 详解与使用(内有大量例子)

0. 写在前面 本文是根据 matplotlib 3.7.1 版本撰写的&#xff0c;若出现有文章与实际有出入的情况请查看版本是否一致。 我们使用 matplotlib.pyplot 需要使用以下的语句来导入它 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np1. 官方文档详…

chrome开发调试小技巧—Replay XHR(重新请求)

一、需求 想要验证一个ajax请求&#xff0c;需要每次都需要在页面点几次才会触发或者刷新页面&#xff0c;着急调试看效果时&#xff0c;可以通过chrome的Replay XHR功能直接同参数重新请求ajax 二、实现 chrome调试工具network下找到要重新发起的ajax请求&#xff0c;右键找…

Vue核心语法

Vue核心语法 vue下载 我们以前都是用的框架来搭建的&#xff0c;省去了很多内容&#xff0c;今天我们从原始的方式来使用vue&#xff0c;下面是下载地址 响应式 未使用响应式 <!DOCTYPE html> <html lang"en"><head><meta charset"U…

基于J-Link RTT Viewer输出日志(适用于JLink DAPLink STLink)

前言 通过RTT输出日志&#xff0c;可以不占额外的引脚和外设&#xff0c;速度非常快&#xff0c;几乎不影响程序的实时性。 参考官方介绍文档 安装J-Link驱动 官网下载地址&#xff0c;本文选择的是7.60版本&#xff0c;如果官网下载太慢&#xff0c;可以点击在CSDN下载 …

linux入门进程概念中(僵尸进程,孤儿进程,进程优先级,并行和并发,环境变量)

目录 一、进程状态 1.看看Linux Kernel怎么说 1.1阻塞 2.进程状态查看 3.僵尸进程 3.1模拟僵尸进程的实验 3.2僵尸进程的危害 4.孤儿进程 4.1模拟孤儿进程实验 二、进程优先级 三、环境变量 3.1常见环境变量 3.2查看环境变量的方法&#xff1a; 3.3 加入环境变量 …

性能测试基础知识及性能指标

目录 1.1、性能概述&#xff1a; 1.2 、测试目标 1.3 、性能测试方法 2 .1 、需求分析 2.2 、测试对象 2.3 、拆分对象 2.4 、指标分析 3.1 、用例设计 4.1、性能监控关键指标 结尾 &#x1f381;更多干货 前言&#xff1a;最近公司接了个项目&#xff0c;领导开会突…

【python】面向对象语言的特性

面向对象语言的特性 封装继承继承定义继承下的方法重写 类型注解变量类型注解函数(方法)类型注解Union 联合类型注解 多态定义抽象类 面向对象语言的三大特性&#xff1a;封装、继承、多态 本文主要来介绍这三个特性 封装 封装&#xff1a;指的是将对象的状态信息隐藏在对象内…

nodejs(express)+TypeScripts环境

初始化项目&#xff1a; npm init -y 安装包&#xff1a; npm i types/express //安装type类型的express如果不加types就是安装js文件&#xff0c;虽然对项目的运行没啥问题但是会没有提示npm i typescriptnpm i types/mysql安装完成后就开始配置了&#xff1a; 在项目的根…

VCL组件DevExpress VCL图表控件中文指南 - 如何实现值标签自定义?

DevExpress VCL拥有230个VCL界面控件、40个自定义设计的VCL应用主题&#xff0c;它能帮助您创建优异的用户体验&#xff0c;提供高影响力的业务解决方案&#xff0c;并利用您现有的VCL技能为未来构建下一代应用程序。 在刚更新的DevExpress VCL v23.1组件库中&#xff0c;包含…

英伟达GeForce Game Ready 536.40 WHQL驱动程序快速获取

6月底&#xff0c;随着英伟达RTX 4060显卡发布&#xff0c;英伟达随即发布了Game Ready 536.40 WHQL显卡驱动&#xff0c;为RTX 4060显卡提供支持。除了RTX 4060 显卡驱动支持外&#xff0c;还有其他方面的优化&#xff0c;驱动人生为大家带来536.40 WHQL驱动支持一览。 NVIDI…