LeetCode 1488. 避免洪水泛滥--模拟
- 避免洪水泛滥
你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 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 天选择抽干的湖泊。
如果有多种可行解,请返回它们中的 任意一个 。如果没办法阻止洪水,请返回一个 空的数组 。
请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。但如果你选择抽干一个空的湖泊,那么将无事发生(详情请看示例 4)。
示例 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 都会再次下雨,所以不管我们第三天抽干哪个湖泊的水,另一个湖泊都会发生洪水。
示例 4:
输入:rains = [69,0,0,0,69]
输出:[-1,69,1,1,-1]
解释:任何形如 [-1,69,x,y,-1], [-1,x,69,y,-1] 或者 [-1,x,y,69,-1] 都是可行的解,其中 1 <= x,y <= 10^9
示例 5:
输入:rains = [10,20,20]
输出:[]
解释:由于湖泊 20 会连续下 2 天的雨,所以没有没有办法阻止洪水。
提示:
1 <= rains.length <= 10^5
0 <= rains[i] <= 10^9
通过次数3,321
提交次数15,587
题解:直接记录晴天的日期,然后当遇到某个下雨天某个水池X时,从晴天中找到离上一次下雨天时水池X的最近的日期,覆盖即可。这里一开始用vector但是一直超时,后来看了别人的解答,别人用的set,才注意到区别。
于是这里补充下两者区别:vector是数组储存,set是链表储存,长度为n的vector删除某个在x位置的元素时间为n-x,set删除某个元素时间为1,所以删除操作时时间损耗set明显较小。
AC代码
class Solution {public:
map<int,int>pos;
int id[100010];
vector<int> avoidFlood(vector<int>& rains)
{pos.clear();vector<int>pu;memset(id,0,sizeof(id));set<int> q;for(int i=0;i<rains.size();i++){if(rains[i]==0)q.insert(i+1);else{id[i]=-1;int now=pos[rains[i]];if(now==0)pos[rains[i]]=i+1;else{int POS=now;auto it = q.lower_bound(POS);//返回小于等于POS最近的元素的位置if (it == q.end()) return {};id[*it-1]=rains[i];q.erase(it);pos[rains[i]]=i+1;}}}for(int i=0;i<rains.size();i++){if(id[i]==0)pu.push_back(1);else pu.push_back(id[i]);}return pu;
}
};
勉强通过,时间也不是很理想,,,,,
LeetCode 1488. 避免洪水泛滥--模拟相关推荐
- LeetCode 1488. 避免洪水泛滥(贪心+set二分查找)
1. 题目 你的国家有无数个湖泊,所有湖泊一开始都是空的. 当第 n 个湖泊下雨的时候,如果第 n 个湖泊是空的,那么它就会装满水,否则这个湖泊会发生洪水. 你的目标是避免任意一个湖泊发生洪水. 给你 ...
- 题目地址(1488. 避免洪水泛滥)
题目地址(1488. 避免洪水泛滥) https://leetcode.cn/problems/avoid-flood-in-the-city/ 题目描述 你的国家有无数个湖泊,所有湖泊一开始都是空的 ...
- leetcode:1488. 避免洪水泛滥【二分 + 贪心】
分析 先把可以抽干的位置记录下来,用sortedlist的q,方便删除 然后用dict记录某个湖之前是否出现过 如果出现过肯定有pre和now的位置 然后根据pre和now找到q中对应的idx,直接改 ...
- LeetCode 1488. Avoid Flood in The City - Java - 优先队列
题目链接:1488. 避免洪水泛滥 Your country has an infinite number of lakes. Initially, all the lakes are empty, ...
- 【刷题篇】避免洪水泛滥
目录 一.题目 二.题解 2.1 大致思路 2.2 详细实现 2.3 源码 一.题目 OJ链接 二.题解 2.1 大致思路 2.2 详细实现 2.3 源码 import java.util.HashM ...
- 电影 《洪水泛滥之前》下载地址 Before the Flood
我刚才看了下<洪水泛滥之前>电影,了解了关于全球变暖的事实,也知道了<巴黎条约>的意图所在,意图在减少化石燃料的使用,保护全球气候,给我们的未来一个清白的天空.而 Trump ...
- LeetCode 1701. 平均等待时间(模拟)
文章目录 1. 题目 2. 解题 1. 题目 有一个餐厅,只有一位厨师.你有一个顾客数组 customers ,其中 customers[i] = [arrivali, timei] : arriva ...
- LeetCode 900. RLE 迭代器(模拟/二分查找)
文章目录 1. 题目 2. 解题 2.1 直接模拟 2.2 二分查找 1. 题目 编写一个遍历游程编码序列的迭代器. 迭代器由 RLEIterator(int[] A) 初始化,其中 A 是某个序列的 ...
- LeetCode 723. 粉碎糖果(模拟)
文章目录 1. 题目 2. 解题 1. 题目 这个问题是实现一个简单的消除算法. 给定一个二维整数数组 board 代表糖果所在的方格,不同的正整数 board[i][j] 代表不同种类的糖果,如果 ...
最新文章
- 一览群智胡健:在中国完全照搬Palantir模式,这不现实
- 使用指针数组实现这两个矩阵的相乘
- 第18课:模型部署上线的几种服务发布方式
- linux网络设备—mdio总线
- gdiplus判断一个点是否在圆弧线上_福建教师招聘考试小学数学面试教案:圆的认识...
- 变量在函数内外的作用域 3
- @dynamic 模拟NSManagedObject类的内部实现,AFN的非常规用法
- 最后2天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!
- oracle+查表物理块数,查询Oracle表实际物理使用大小
- CF16E Fish(状压+期望dp)
- 医护人员计算机专业培训内容,电子病历-住院医生工作站的前期培训
- 跟着团子学SAP PS:项目版本管理-项目模拟功能(CJV1/CJV2/CJV3/CJV4)
- 如果你读不完凯文凯利的《必然》,至少读完这120条书摘
- ppt压缩文件怎么压缩最小,ppt无损压缩
- Java生成png文件字体不清晰_将Graphics2D写入BufferedImage - 字体分辨率较差
- 淘宝默认好评加分吗?分几种情况?
- 桥式滤波整流电路仿真MATLAB,基于Matlab/Simulink的整流滤波电路的建模与仿真
- html写的代码投屏到LED屏,LED大屏无线投屏器,只需一步,轻松实现笔记本电脑投屏显示...
- 杂谈PPT 文档撰写
- 微信 PC 端h5页面打开的内置浏览器开发者工具界面
热门文章
- 3.Mapper.xml 详解
- BZOJ 3039: 玉蟾宫
- 每日10行代码67:openpyxl指定工作表(sheet)的5种方法
- 淘宝客服的逆袭之路:拼搏6个月,从6K到12K,我哭了……
- 采购申请审批策略增强_SAP刘梦_新浪博客
- 关于获取计算机唯一ID问题
- PAT.A1071 Speech Patterns
- node中req.params,req.query,req.body三者的区别
- 【图片】机器学习--名画风格 neural-style
- SpringBoot 运行机制