LeetCode 75 第四题(605)种花问题

题目:

示例:

分析:

给一个数组表示一个花园,其中0表示空地,1表示已经有花种下去了.

空地可以种花,但是花和花之间不能相邻,即数组中不能有两个连续的1.

给一个数n,问我们能不能在花园里种n朵花.

我们可以找出我们所能种的最多的数量(而不是只种n朵),然后比较我们最多能种的数量是否大于等于n.所以我们可以遍历整个数组,找出可以种花的地方,然后置1表示把花种下去了(也为了影响判断后续土地能否种花).

为了保证我们种的花是数量最多的,我们需要让首尾两侧在能种花的情况下都种上,为什么需要先种首尾两侧呢?

因为在其他地方种花需要判断左右两侧是否都为0(空地),而在首部只需要考虑右侧,在尾部只需要考虑左侧.并且由于我们要种最多的花,因此我们需要把花种的紧凑一些,所以在首尾处留0(空地)不太符合我们的要求对吧.

可以来举个例子,以首部为例,若是首部的连续空地数为奇数,则会如下例:

 我们可以看出结果1(首部种花)和结果2(首部不种花)的结果是一样的.

若是首部的连续空地数为偶数,则会如下例:

可以看出首部种花的结果会比首部不种花的结果多,反过来尾部也是一样的.

因此我们可以先把首尾两处单独拎出来判断(数组长度为1时也要单独判断):

        int res=0;
        int len=flowerbed.size();
        if(len==1){    //数组长度为1时的判断
            if(flowerbed[0]==0) res++;
            return res>=n;
        }
        if(flowerbed[0]==0 && flowerbed[1]==0){    //若是首部前两个都为0,则在首部种一朵花
            flowerbed[0]=1;
            res++;
        }
        if(flowerbed[len-1]==0 && flowerbed[len-2]==0){    //若是尾部后两个都为0,则在尾部中一朵花
            flowerbed[len-1]=1;
            res++;
        }

 然后我们可以写一个函数来判断其余土地能不能种花:

    bool check(int index,vector<int>& flowerbed){
        //如果相邻的土地都是空的,则可以种花
        if(flowerbed[index-1]==0 && flowerbed[index+1]==0){
            flowerbed[index]=1;
            return true;
        }
        return false;
    }

然后循环遍历,若是遇到空地,则用函数判断能否种地,完整代码如下:

class Solution {
public:
    //检查是否能种花
    bool check(int index,vector<int>& flowerbed){
        if(flowerbed[index-1]==0 && flowerbed[index+1]==0){
            flowerbed[index]=1;
            return true;
        }
        return false;
    }
    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
        int res=0;
        int len=flowerbed.size();
        //特殊情况特殊处理
        if(len==1){
            if(flowerbed[0]==0) res++;
            return res>=n;
        }
        //初始化首部土地
        if(flowerbed[0]==0 && flowerbed[1]==0){
            flowerbed[0]=1;
            res++;
        }
        //初始化尾部土地
        if(flowerbed[len-1]==0 && flowerbed[len-2]==0){
            flowerbed[len-1]=1;
            res++;
        }
        for(int i=1;i<len-1;i++){
            if(flowerbed[i]==0 && check(i,flowerbed)) res++;
        }
        return res>=n;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis相关配置(3)

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ 文章目录 Redis相关配置1、units2、Include3、loadmodule 加载模块4、NET…

你认为大数据的特点是什么?_光点科技

随着信息技术的迅猛发展&#xff0c;大数据已成为当今社会不可忽视的重要资源。它是指规模庞大且快速增长的数据集合&#xff0c;其中包含着宝贵的信息和见解。大数据的特点是多样而复杂的&#xff0c;它们塑造了我们的世界并深刻地影响着各行各业。 巨大的规模&#xff1a;大数…

css学习知识总结

一、css与html连接&#xff1a; 可以将css语句放在html内部&#xff0c;一般放在<head>之下&#xff0c;定义在<style>中&#xff0c;格式一般是一个“.”然后加上一个“名称”再加上一个“{}”&#xff0c;再在“{}”内部定义具体的语句。 二、调整元素 2.1 字体…

HIVE SQL 根据主键去重并实现其余字段分组聚合

相同个人id下所有字段按时间顺序补位&#xff0c;取首个不为空值 --数据建表 drop table if exists db.tb_name; create table if not exists db.tb_name ( id string,name string,tele string,email string,date string ) ; insert overwrite table db.tb_name values (&qu…

无涯教程-Javascript - Switch语句

从JavaScript 1.2开始&#xff0c;您可以使用 switch 语句来处理这种情况&#xff0c;它比重复的 if ... else if 语句更有效。 流程图 以下流程图说明了switch-case语句的工作原理。 switch 语句的目的是给出一个要求值的表达式&#xff0c;并根据表达式的值执行多个不同的语…

springboot项目中添加自定义日志

文章目录 当前项目使用的springboot为 2.2.2.release。低版本的话logging下的子标签有可能不是这样的。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELE…

Jetpack Compose之学习前的准备~

作者&#xff1a;TimeFine 一、为啥学习Compose 学习Compose一开始我是拒绝的&#xff0c;因为习惯改变太大&#xff0c;写xml挺好的为啥要卷Compose&#xff1f; 后来看了郭霖大佬的文章 写给初学者的Jetpack Compose教程&#xff0c;为什么要学习Compose&#xff1f; 觉得大…

K8S集群内部署Rancher2.5.16

K8S集群内部署Rancher2.5.16 一、环境 k8s&#xff1a;1.18.20 OS&#xff1a;Anolis OS 7.9 rancher&#xff1a;2.5.16 参考官网部署文档&#xff1a;https://ranchermanager.docs.rancher.com/zh/v2.6/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster 二…

springboot整合feign实现RPC调用,并通过Hystrix实现服务降级

目录 一、服务提供者 二、服务消费者 三、测试效果 四、开启Hystrix实现服务降级 feign/openfeign和dubbo是常用的微服务RPC框架&#xff0c;由于feigin内部已经集成ribbon&#xff0c;自带了负载均衡的功能&#xff0c;当有多个同名的服务注册到注册中心时&#xff0c;会根…

Linux中常用的指令

ls ls [选项] [目录或文件] 功能&#xff1a;对于目录&#xff0c;列出该目录下所有的子目录和文件&#xff1b;对于文件&#xff0c;列出该文件的文件名和其他属性 常用选项&#xff1a; -a:列出目录下的所有文件&#xff0c;包括以.开头的隐藏文件 -l:列出文件的详细信息。…

知识图谱推理的学习逻辑规则(上)7.19+(下)7.20

知识图谱推理的学习逻辑规则 摘要介绍相关工作模型 &#xff08;7.20&#xff09;知识图谱推理逻辑规则概率形式化参数化规则生成器具有逻辑规则的推理预测器 优化E步骤M步骤 实验实验设置实验结果 总结 原文&#xff1a; 摘要 本文研究了在知识图谱上进行推理的学习逻辑规则…

Git基本操作命令

** 创建仓库 **&#xff0c;用于被git管理 第一步&#xff1a; $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit第二步&#xff1a; 通过git init命令把这个目录变成Git可以管理的仓库&#xff1a; $ git init** 提交代码 **&#xff1a; 第一步&#xff…

网络安全在2023好入行吗?

前言 023年的今天&#xff0c;慎重进入网安行业吧&#xff0c;目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多&#xff0c;还有很多高中被挖过来的大佬。 理由很简单&#xff0c;目前来说&#xff0c;信息安全的圈子人少&#xff0c;985、211院校很多都才建…

Java 中 synchronized 的优化操作:锁升级、锁消除、锁粗化

由 并发编程中常见的锁策略 总结可知&#xff0c;synchronized 具有以下几个特性&#xff1a; 开始时是乐观锁&#xff0c;如果锁冲突频繁&#xff0c;就转换为悲观锁。开始是轻量级锁实现&#xff0c;如果锁被持有的时间较长&#xff0c;就转换成重量级锁。实现轻量级锁时&am…

Raft算法之日志复制

Raft算法之日志复制 一、日志复制大致流程 在Leader选举过程中&#xff0c;集群最终会选举出一个Leader节点&#xff0c;而集群中剩余的其他节点将会成为Follower节点。Leader节点除了向Follower节点发送心跳消息&#xff0c;还会处理客户端的请求&#xff0c;并将客户端的更…

1.Docker概念

文章目录 Docker概念Docker容器与虚拟机的区别内核中的2个重要技术Linux Namespace的6大类型docker三个重要概念部署Dockeryum安装二进制安装 Docker 概念 docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。docker可以让开发者打包他们的…

AtcoderABC243场

A - Shampoo A - Shampoo ] 题目大意 高桥家有三个人&#xff1a;高桥、他的父亲和他的母亲。每个人每晚都在浴室洗头发。他们按照顺序使用AA、BB和CC毫升的洗发水。 问&#xff0c;今天早上瓶子里有VV毫升的洗发水。在不重新装满的情况下&#xff0c;谁会第一个用完洗发水洗头…

K8s入门

K8s入门 目录 K8s入门namespacepoddeployment多版本扩缩容治愈能力滚动更新版本回退 serviceClusterIPNodePort ingress域名访问路径重写流量限制 存储抽象PV&PVCConfigMapSecret namespace kubectl get ns # 获取命名空间 kubectl create ns 名字 # 创建命名空间 ku…

学习babylon.js --- [3] 开启https

babylonjs提供WebVR功能&#xff0c;但是使用这个功能得用https&#xff0c;本文讲述如何使用自签名证书来开启https&#xff0c;基于第二篇文章中搭建的工程。 一 生成自签名证书 首先要安装openssl&#xff0c;这个去网上搜下就行了。安装完之后在终端下输入openssl回车可以…

【CNN记录】pytorch中BatchNorm2d

torch.nn.BatchNorm2d(num_features, eps1e-05, momentum0.1, affineTrue, track_running_statsTrue, deviceNone, dtypeNone) 功能&#xff1a;对输入的四维数组进行批量标准化处理&#xff08;归一化&#xff09; 计算公式如下&#xff1a; 对于所有的batch中样本的同一个ch…