题目地址(1488. 避免洪水泛滥)

https://leetcode.cn/problems/avoid-flood-in-the-city/

题目描述

你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 n 个湖泊下雨前是空的,那么它就会装满水。如果第 n 个湖泊下雨前是 满的 ,这个湖泊会发生 洪水 。你的目标是避免任意一个湖泊发生洪水。给你一个整数数组 rains ,其中:rains[i] > 0 表示第 i 天时,第 rains[i] 个湖泊会下雨。
rains[i] == 0 表示第 i 天没有湖泊会下雨,你可以选择 一个 湖泊并 抽干 这个湖泊的水。请返回一个数组 ans ,满足:ans.length == rains.length
如果 rains[i] > 0 ,那么ans[i] == -1 。
如果 rains[i] == 0 ,ans[i] 是你第 i 天选择抽干的湖泊。如果有多种可行解,请返回它们中的 任意一个 。如果没办法阻止洪水,请返回一个 空的数组 。请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。但如果你选择抽干一个空的湖泊,那么将无事发生。示例 1:输入:rains = [1,2,3,4]
输出:[-1,-1,-1,-1]
解释:第一天后,装满水的湖泊包括 [1]
第二天后,装满水的湖泊包括 [1,2]
第三天后,装满水的湖泊包括 [1,2,3]
第四天后,装满水的湖泊包括 [1,2,3,4]
没有哪一天你可以抽干任何湖泊的水,也没有湖泊会发生洪水。示例 2:输入:rains = [1,2,0,0,2,1]
输出:[-1,-1,2,1,-1,-1]
解释:第一天后,装满水的湖泊包括 [1]
第二天后,装满水的湖泊包括 [1,2]
第三天后,我们抽干湖泊 2 。所以剩下装满水的湖泊包括 [1]
第四天后,我们抽干湖泊 1 。所以暂时没有装满水的湖泊了。
第五天后,装满水的湖泊包括 [2]。
第六天后,装满水的湖泊包括 [1,2]。
可以看出,这个方案下不会有洪水发生。同时, [-1,-1,1,2,-1,-1] 也是另一个可行的没有洪水的方案。示例 3:输入:rains = [1,2,0,1,2]
输出:[]
解释:第二天后,装满水的湖泊包括 [1,2]。我们可以在第三天抽干一个湖泊的水。
但第三天后,湖泊 1 和 2 都会再次下雨,所以不管我们第三天抽干哪个湖泊的水,另一个湖泊都会发生洪水。提示:1 <= rains.length <= 105
0 <= rains[i] <= 109

前置知识

公司

  • 暂无

思路

关键点

代码

  • 语言支持:Python3

Python3 Code:


class Solution:def avoidFlood(self, rains: List[int]) -> List[int]:"""采用事后诸葛+二分查找的方法"""import bisect# 初始化三个变量 ans = [1]*len(rains) # 表示输出结果,初始化为抽1号湖泊的水lakes = {} # 记录哪一天下雨了sunny = [] # 记录晴天出现的时间for day,rain in enumerate(rains):# 如果下雨了if rain > 0:ans[day] = -1 # 记录下雨# 决定是否抽水if rain - 1 in lakes: # 如果rain-1湖泊有水# 判断是否能够抽水 是否在rain-1湖泊有水后存在晴天j = bisect.bisect_left(sunny,lakes[rain-1])if j == len(sunny):return []ans[sunny.pop(j)] = rainlakes[rain-1] = dayelse:sunny.append(day)return ans 

复杂度分析

令 n 为数组长度。

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

题目地址(1488. 避免洪水泛滥)相关推荐

  1. LeetCode 1488. 避免洪水泛滥--模拟

    避免洪水泛滥 你的国家有无数个湖泊,所有湖泊一开始都是空的.当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水.你的目标是避免任意一个湖泊发生洪水. 给你一 ...

  2. LeetCode 1488. 避免洪水泛滥(贪心+set二分查找)

    1. 题目 你的国家有无数个湖泊,所有湖泊一开始都是空的. 当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水. 你的目标是避免任意一个湖泊发生洪水. 给你 ...

  3. leetcode:1488. 避免洪水泛滥【二分 + 贪心】

    分析 先把可以抽干的位置记录下来,用sortedlist的q,方便删除 然后用dict记录某个湖之前是否出现过 如果出现过肯定有pre和now的位置 然后根据pre和now找到q中对应的idx,直接改 ...

  4. 电影 《洪水泛滥之前》下载地址 Before the Flood

    我刚才看了下<洪水泛滥之前>电影,了解了关于全球变暖的事实,也知道了<巴黎条约>的意图所在,意图在减少化石燃料的使用,保护全球气候,给我们的未来一个清白的天空.而 Trump ...

  5. 【刷题篇】避免洪水泛滥

    目录 一.题目 二.题解 2.1 大致思路 2.2 详细实现 2.3 源码 一.题目 OJ链接 二.题解 2.1 大致思路 2.2 详细实现 2.3 源码 import java.util.HashM ...

  6. 不要在桌面保存长期修改的文件否则系统挂了时候面临文件丢失的问题,长期总结面试资料(公司 题目 地址 氛围 加班情况 薪资情况)毁于一旦

    不要在桌面保存长期修改的文件否则系统挂了时候面临文件丢失的问题,长期总结面试资料(公司 题目 地址 氛围 加班情况 薪资情况)毁于一旦! 不要在桌面保存长期修改的文件否则系统挂了时候面临文件丢失的问题 ...

  7. 南京邮电大学CTF题目writeup (一) 含题目地址

    题目地址:http://nctf.nuptzj.cn/ 靶场关了 能找到一题目 是一题吧 Pass-01 进去就说我不是admin 所以肯定是破解admin的账户密码拿到flag 点击下面的源码 &l ...

  8. 南京邮电大学CTF题目writeup (二) 含题目地址

    Pass-01 题目地址:http://nctf.nuptzj.cn/web15/ 看题目就是一个登录失败的提示"Invalid password!" 通过查看源代码 可见如下图: ...

  9. 力扣周赛 第194场 5442. 避免洪水泛滥

    题目 原题链接 你的国家有无数个湖泊,所有湖泊一开始都是空的.当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水.你的目标是避免任意一个湖泊发生洪水. 给你 ...

最新文章

  1. 网友:Java岗,自学一个月跳槽计算机视觉!附学习资源合集
  2. Json在线格式化站点
  3. encodeURIComponent的用法
  4. Machine Learning week 5 quiz: programming assignment-Multi-Neural Network Learning
  5. .netcore 开发的 iNeuOS 物联网平台部署在 Ubuntu 操作系统,无缝跨平台
  6. [NodeJs] npm提供了哪些钩子?各有什么作用?
  7. RPC框架的实现原理,及RPC架构组件详解
  8. php 判断ajax访问,PHP里判断是否Ajax请求
  9. ACL2022奇葩标题大赏
  10. elk日志系统中elasticsearch 索引read only 解决
  11. Word排版艺术—读书笔记
  12. xodo pdf android,Xodo PDF查看器和编辑器「Xodo PDF Viewer Editor」
  13. idea remote debug
  14. D. Sequence and Swaps
  15. English Voice of Bye Bye Bye
  16. 用碎玻璃“洗脸”的奇人
  17. 华为开发者大会2020开幕,发布多项新开发者技术及系统
  18. 山寨版“滴滴”,竟是招嫖软件!
  19. python中国古代数学问题——二鼠打洞
  20. wasp软件怎么安装不了_安装选项 · alibaba/wasp Wiki · GitHub

热门文章

  1. 简单快速的血管增强算法
  2. 打造智慧幼儿园!学会一招,快速实现
  3. Android源码阅读---init进程
  4. com.sun.tools.corba.se.idl.Generator不存在, 找不到tools.jar的解决办法
  5. 多媒体会议室设备配置单
  6. Python冷门知识
  7. Web3 入门手册:从认知到实践
  8. 计算机主板有什么要求,电脑主板的大小有什么影响?
  9. 学习记录:Ubuntu系统安装远程控制软件teamviewer
  10. JS-两周内自动登录功能