【力扣每日一题】2023.10.13 避免洪水泛滥

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

给我们一个一维数组,元素为0表示对应日期不下雨,非0则表示对应日期对应号的湖泊下雨,下雨之后会导致该湖泊满水,如果湖泊满水之后还下雨,那么就会导致洪水。如果不下雨我们就可以选择一个湖泊抽水,抽水之后对应湖泊就空了。同时,所有湖泊一开始都是空的。

要我们返回一个一维数组,第i个元素表示第i天我们抽取的湖泊号数,如果那天下雨,那么我们无法抽水,给答案置-1。要我们避免发生洪水,可以返回任意抽水方案。

如果我们无论怎么抽水都会导致洪水,那么返回空数组。

我们需要保证在某湖泊下雨之前,这个湖泊是空的,也就是说除非这个湖泊是第一次下雨,否则我们需要在下雨之前把这个湖泊给抽了。

我们能抽水的时候只能是没有下雨的时候,所以没下雨的时候我们就要选择抽哪个湖泊的水了,这该如何选择呢?我们要抽的湖泊是下一个下雨且已经满了的湖泊,也就是这个湖泊已经下过雨了,并且下一个下雨的还是这个湖泊,这样就可以避免洪水了。

所以我们需要记录下过雨的湖泊,使用set或是map都可以很方便地查询某号湖泊是否下过雨,具体选择哪种容器我们接着再分析。

假设我们不知道下一次下雨的是哪个湖泊,那么我们就在没下雨的日期放个“时光机器”,也就是把没下雨的日期记录下来,这次抽水的机会我们先不抽水,等下下次下雨的时候我再“穿越”回合适的日期把这个湖泊的水抽掉。

存放这个“时光机器”也就是索引的容器,我们可以使用vector。

如果某个湖泊下雨了,并且之前下过雨,我们需要“穿越”回去抽水了,现在从存放“时光机器”的容器里我们选择合适的日期穿越回去,最合适的日期就是这个湖泊第一次下雨之后的第一个没雨的日期,我们就挑选出比该湖泊第一次下雨的日期更大的第一个日期,由此可见,我们不仅要存储下雨的湖泊,还需要记录该湖泊下雨时的日期,所以回到刚刚的容器选择问题,存放下过雨的湖泊的容器我们选择map,键值就是下雨的日期。

现在已经分析完毕,我们把之前的分析结果串连起来。

我们用下标遍历题目给出的数组,如果元素为0表示不下雨,我们就把当前下标存入vector中。

如果元素不为0表示有湖泊不下雨,我们就开始操作,如果是第一次下雨我们就将湖泊的号数连同下标(也就是日期)存放进map中,如果不是第一次下雨,那就意味着我们需要“穿越”回去把这个湖泊的水抽走了。

由于我们是按顺序存放日期的,所以我们可以直接遍历vector,找到第一个大于这个湖泊第一次下雨日期的日期,然后将对应日期的答案修改为这个湖泊的号数。如果我们遍历完全部的vector都找不到合适的日期,那么就表明我们无法做到不发生洪水,这时返回空数组即可。

同时不要忘记收尾工作,我们“穿越”回去把湖泊第一次下的雨给抽走了,那么就相当于湖泊下的第二场雨变成了“第一次下的雨”,所以我们还需要更新湖泊下雨的日期,以及把使用过的“时光机器”从容器中移除。

最后返回结果即可。

代码:

class Solution {
public:vector<int> avoidFlood(vector<int>& rains) {int n=rains.size();vector<int>res(n,1);                //默认抽取1号vector<int> flag;                   //存储可以抽水的日期unordered_map<int,int>m;            //存放湖泊装满水的日期for(int i=0;i<n;i++){if(rains[i]==0) flag.push_back(i); //如果没下雨,那么可以抽水,记录日期   else{if(m.find(rains[i])==m.end()) m[rains[i]]=i;    //如果湖泊第一次下雨,记录日期else{auto index=flag.begin();            //找到比湖泊装满水的日期之后的第一个可以抽水的日期for(;index!=flag.end();++index){if((*index)>m[rains[i]]){//找到了就回到那天去抽这个湖泊res[(*index)]=rains[i];break;}}//如果找不到,那么发生洪水if(index==flag.end()) return {};//移除这个可以抽水的日期flag.erase(index);//更新装满水的日期m[rains[i]]=i;}res[i]=-1;}}return res;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】事务四大特性ACID、并发事务问题、事务隔离级别

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MySQL 一、事务四大特性ACID1.1 原子性1.2 …

Zabbix监控系统详解2:基于Proxy分布式实现Web应用监控及Zabbix 高可用集群的搭建

文章目录 1. zabbix-proxy的分布式监控的概述1.1 分布式监控的主要作用1.2 监控数据流向1.3 构成组件1.3.1 zabbix-server1.3.2 Database1.3.3 zabbix-proxy1.3.4 zabbix-agent1.3.5 web 界面 2. 部署zabbix代理服务器2.1 前置准备2.2 配置 zabbix 的下载源&#xff0c;安装 za…

《Node.js+Express+MongoDB+Vue.js全栈开发实战》简介

今天介绍的这本书是《Node.jsExpressMongoDBVue.js全栈开发实战》。该书由清华大学出版社于2023年1月出版 外观 从书名故名思议&#xff0c;就是基于Node.jsExpressMongoDBVue.js来实现企业级应用全栈开发。 封面风格比较简约&#xff0c;插图是一张类似于罗马时代战车形象&…

微软10月补丁 | 修复103个漏洞,包括2个零日漏洞,13个严重漏洞

近日&#xff0c;微软发布了2023年10月的补丁更新&#xff0c;解决了其软件中的103个漏洞。 在这103个漏洞中&#xff0c;有13个的评级为严重漏洞&#xff0c;90个被评为重要漏洞。自9月12日以来&#xff0c;谷歌已经解决了基于chrome的Edge浏览器的18个安全漏洞。 这两个零日…

Puppeteer监听网络请求、爬取网页图片(二)

Puppeteer监听网络请求、爬取网页图片&#xff08;二&#xff09; Puppeteer监听网络请求、爬取网页图片&#xff08;二&#xff09;一、爬取需求二、实现讲解三、效果查看 一、爬取需求 首先打开浏览器&#xff0c;打开指定网站监听网站发出的所有请求&#xff0c;记录请求&a…

【AI视野·今日Robot 机器人论文速览 第五十一期】Tue, 10 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 10 Oct 2023 Totally 54 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers On Multi-Fidelity Impedance Tuning for Human-Robot Cooperative Manipulation Authors Ethan Lau, Vaibhav Srivastava, Sh…

docker应用记录总结

一、前言 docker这类部署工具&#xff0c;久而久之不使用非常容易忘记&#xff0c;甚至连操作命令都容易忘记。网上也有比较全的docker使用教程。这里做一个记录总结&#xff0c;纯属是温故知新。 二、docker部署应用 1、docker印象 docker首先让我想到的是是虚拟化技术&…

计算机毕业设计 高校实习信息发布网站的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

git介绍和安装、(git,github,gitlab,gitee介绍)、git工作流程、git常用命令、git忽略文件

1 git介绍和安装 2 git&#xff0c;github&#xff0c;gitlab&#xff0c;gitee介绍 3 git工作流程 4 git常用命令 5 git忽略文件 1 git介绍和安装 首页功能写完了---》正常应该提交到版本仓库---》大家都能看到这个---》 运维应该把现在这个项目部署到测试环境中---》测试…

A Better Finder Rename 12 for Mac——让重命名变得更简单

A Better Finder Rename 12 for Mac是一款专业的批量重命名工具&#xff0c;为您提供了快速、简单、可靠的重命名解决方案。无论您是否需要批量重命名文件、图像、音频或视频文件等&#xff0c;A Better Finder Rename 12 for Mac可以帮助您快速完成任务&#xff0c;节省宝贵的…

深入探索BP神经网络【简单原理、实际应用和Python示例】

人工神经网络&#xff08;Artificial Neural Networks&#xff09;是一种受到生物神经网络启发的机器学习模型&#xff0c;它的应用范围广泛&#xff0c;包括图像识别、语音识别、自然语言处理等领域。其中&#xff0c;BP神经网络&#xff08;Backpropagation Neural Network&a…

Java开发-参数校验@NotEmpty、@NotBlank、@NotNull

大家好&#xff0c;我是小资。今天给大家说下参数校验。 标题中说的这三个注解所在的包路径为import javax.validation.constraints.*; 千万不要导错包哦&#xff0c;因为他们在好多包里都存在。开发只需引入Spring-web依赖就可以使用了。轻轻松松干掉多余的if-else。 下面我…

someip 入门

什么是someip&#xff1f; SomeIP&#xff08;Scalable Service-Oriented MiddlewarE over IP&#xff09;是一种基于以太网的通信协议&#xff0c;用于汽车领域的通信。它允许不同的汽车电子控制单元&#xff08;ECUs&#xff09;之间通过网络进行通信&#xff0c;以便在车辆内…

“小程序:改变电商行业的新趋势“

目录 引言1. 小程序的简介1.1 什么是小程序&#xff1f;1.2 小程序的优势 2. 小程序之电商演示1.注册微信小程序2.安装开发工具3.创建项目 3. 小程序之入门案例总结 引言 随着移动互联网的迅猛发展&#xff0c;小程序作为一种全新的应用形态&#xff0c;正在逐渐改变着传统电商…

数据结构--》解锁数据结构中树与二叉树的奥秘(二)

数据结构中的树与二叉树&#xff0c;是在建立非线性数据结构方面极为重要的两个概念。它们不仅能够模拟出生活中各种实际问题的复杂关系&#xff0c;还常被用于实现搜索、排序、查找等算法&#xff0c;甚至成为一些大型软件和系统中的基础设施。 无论你是初学者还是进阶者&…

Spring Cloud--Nacos+@RefreshScope实现配置的动态更新

原文网址&#xff1a;Spring Cloud--NacosRefreshScope实现配置的动态更新_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringCloud整合Nacos使用RefreshScope实现动态更新配置。 官网 Nacos Spring Cloud 快速开始 动态更新的介绍 动态更新的含义&#xff1a;修改应…

【09】基础知识:React组件的生命周期

组件从创建到死亡它会经历一些特定的阶段。 React 组件中包含一系列勾子函数&#xff08;生命周期回调函数 <> 生命周期钩子函数 <> 生命周期函数 <> 生命周期钩子&#xff09;&#xff0c;会在特定的时刻调用。 我们在定义组件时&#xff0c;会在特定的生…

挖机技术哪家强

挖机技术哪家强&#xff0c;中国山东找蓝翔&#xff0c;开挖机是我曾经的梦想&#xff0c;每个男人心中都有一台自己的挖机&#xff0c;近半年做的项目就是关于挖机销售CRM&ERP系统&#xff0c; 今天我们聊聊关于挖机的基本知识。 注&#xff1a;此文并非广告&#xff0c;…

Mybatis学习笔记注解/xml映射/动态SQL%%%Mybatis教程

介绍 Mybatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 的开发 MyBatis中文网 Mybatis 入门 快速入门 步骤 创建 SpringBoot 工程、数据库表 user、实体类 User引入 Mybatis 相关依赖&#xff0c;配置 Mybatis&#xff08;数据库连接信息&#xff09;编写 SQL 语…

金x软件有限公司安全测试岗位面试

目录 一、自我介绍 二、你是网络空间安全专业的&#xff0c;那你介绍下网络空间安全这块主要学习的东西&#xff1f; 三、本科专业是网络工程&#xff0c;在嘉兴海视嘉安智城科技有限公司实习过&#xff0c;你能说下干的工作吗&#xff1f;&#xff08;没想到问的是本科实习…