数据结构与算法之数组: Leetcode 605. 种花问题 (Typescript版)

news/2024/7/8 5:14:14

种花问题

  • https://leetcode.cn/problems/can-place-flowers/

描述

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

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

提示:

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

算法实现
1 )方案 1

function canPlaceFlowers(flowerbed: number[], n: number): boolean {
    // 计数
    let count = 0
    // 在这里对数组进行扩展来方便编程,最后一块地能不能种只取决于前面的是不是1,所以默认最后一块地的右侧是0
    flowerbed.push(0)
    for (let i = 0, len = flowerbed.length - 1; i < len; i++) {
        // 当前是非零的情况,直接跳过
        if (flowerbed[i] !== 0) {
            continue
        }
        // 开始边界的处理
        if (i === 0 && flowerbed[1] === 0) {
            count++
            i++
        } else if (flowerbed[i - 1] === 0 && flowerbed[i + 1] === 0) {
            // 这种情况是正常情况,当前左右都是0,则可种树
            count++
            i++
        }
        // 结束边界无需处理,因为数组在最后扩展了一个0,上述正常情况已经包含了 无 
    }
    return count >= n
}
  • 这里需要一个数学建模,哪些情况下可以种花,简化模型
  • 这里的地就是指 1或0,1是一块地,0也是一块地
  • 我们需要放1,能放1的地方是左边和右边都是0,并且当前位置是0
  • 匹配完成后,我们要主动跳过当前匹配,也就是跳2个位置
    • 体现在手动 i++以及for循环一次后自带的一个i++

http://lihuaxi.xjx100.cn/news/1087681.html

相关文章

Java 中的线程是什么,如何创建和管理线程-中(十二)

书接上文 三、Java 线程的同步 Java 中的线程同步是通过 synchronized 关键字实现的。在多线程环境下&#xff0c;当多个线程同时访问共享资源时&#xff0c;如果不进行同步控制&#xff0c;就会出现数据不一致、死锁等问题。为了保证多个线程之间的安全访问&#xff0c;需要…

MCU固件升级系列1(STM32)

本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍&#xff0c;硬件选用STM32F407ZGT6&#xff08;手里只有&#xff09;&#xff0c;来完成这系列教程。 前言 为什么需要固件升级: 功能更新&#xff1a;随着产品的迭代和用户需求的变化&#xff0c;可能需要…

Prometheus监控系统存储容量优化攻略,让你的数据安心保存!

云原生监控领域不可撼动&#xff0c;Prometheus 是不是就没缺点&#xff1f;显然不是。 一个软件如果什么问题都想解决&#xff0c;就会导致什么问题都解决不好。所以Prometheus 也存在不足&#xff0c;广受诟病的问题就是 单机存储不好扩展。 1 真的需要扩展容量吗&#xff…

04_Uboot操作命令与其他命令

目录 BOOT 操作命令 bootz命令 bootm 命令 reset 命令 go 命令 run 命令 mtest 命令 BOOT 操作命令 uboot的本质工作是引导Linux,所以uboot肯定有相关的boot(引导)命令来启动Linux。常用的跟boot有关的命令有:bootz、bootm和boot。 bootz命令 要启动Linux,需要先将Lin…

OD工具之动态逆向分析技术实例分析

OD工具之动态逆向分析技术实例分析 vscode等编写cmp.cOD工具打开cmp.exe 卧槽垃圾高级软件工程真是烦人还是记录一下吧那么简单的几行没有手册搞半天都无力吐槽了 vscode等编写cmp.c 在vscode等编辑器中编写cmp.c文件&#xff1a; #include<stdio.h> int main() {int …

kotlin教程4:函数进阶

文章目录 可变参数尾递归函数函数式 kotlin教程&#xff1a;编程基础&#x1f48e;数据结构&#x1f48e;面向对象 可变参数 kotlin的函数定义非常灵活&#xff0c;既可以按照顺序传参&#xff0c;也可以通过参数名传参&#xff0c;而且可以设置参数默认值&#xff0c;这些在…

Linux安装MongoDB数据库,并内网穿透远程连接

文章目录 前言1. 配置Mongodb源2. 安装MongoDB3. 局域网连接测试4. 安装cpolar内网穿透5. 配置公网访问地址6. 公网远程连接7. 固定连接公网地址8. 使用固定地址连接 转载自Cpolar Lisa文章&#xff1a;Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透」 前言 …

VS快捷键大全 | 掌握这些快捷键,助你调试快人一步

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…