1. 避免洪水泛滥

你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 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. 避免洪水泛滥--模拟相关推荐

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

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

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

    题目地址(1488. 避免洪水泛滥) https://leetcode.cn/problems/avoid-flood-in-the-city/ 题目描述 你的国家有无数个湖泊,所有湖泊一开始都是空的 ...

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

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

  4. LeetCode 1488. Avoid Flood in The City - Java - 优先队列

    题目链接:1488. 避免洪水泛滥 Your country has an infinite number of lakes. Initially, all the lakes are empty, ...

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

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

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

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

  7. LeetCode 1701. 平均等待时间(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 有一个餐厅,只有一位厨师.你有一个顾客数组 customers ,其中 customers[i] = [arrivali, timei] : arriva ...

  8. LeetCode 900. RLE 迭代器(模拟/二分查找)

    文章目录 1. 题目 2. 解题 2.1 直接模拟 2.2 二分查找 1. 题目 编写一个遍历游程编码序列的迭代器. 迭代器由 RLEIterator(int[] A) 初始化,其中 A 是某个序列的 ...

  9. LeetCode 723. 粉碎糖果(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 这个问题是实现一个简单的消除算法. 给定一个二维整数数组 board 代表糖果所在的方格,不同的正整数 board[i][j] 代表不同种类的糖果,如果 ...

最新文章

  1. 一览群智胡健:在中国完全照搬Palantir模式,这不现实
  2. 使用指针数组实现这两个矩阵的相乘
  3. 第18课:模型部署上线的几种服务发布方式
  4. linux网络设备—mdio总线
  5. gdiplus判断一个点是否在圆弧线上_福建教师招聘考试小学数学面试教案:圆的认识...
  6. 变量在函数内外的作用域 3
  7. @dynamic 模拟NSManagedObject类的内部实现,AFN的非常规用法
  8. 最后2天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!
  9. oracle+查表物理块数,查询Oracle表实际物理使用大小
  10. CF16E Fish(状压+期望dp)
  11. 医护人员计算机专业培训内容,电子病历-住院医生工作站的前期培训
  12. 跟着团子学SAP PS:项目版本管理-项目模拟功能(CJV1/CJV2/CJV3/CJV4)
  13. 如果你读不完凯文凯利的《必然》,至少读完这120条书摘
  14. ppt压缩文件怎么压缩最小,ppt无损压缩
  15. Java生成png文件字体不清晰_将Graphics2D写入BufferedImage - 字体分辨率较差
  16. 淘宝默认好评加分吗?分几种情况?
  17. 桥式滤波整流电路仿真MATLAB,基于Matlab/Simulink的整流滤波电路的建模与仿真
  18. html写的代码投屏到LED屏,LED大屏无线投屏器,只需一步,轻松实现笔记本电脑投屏显示...
  19. 杂谈PPT 文档撰写
  20. 微信 PC 端h5页面打开的内置浏览器开发者工具界面

热门文章

  1. 3.Mapper.xml 详解
  2. BZOJ 3039: 玉蟾宫
  3. 每日10行代码67:openpyxl指定工作表(sheet)的5种方法
  4. 淘宝客服的逆袭之路:拼搏6个月,从6K到12K,我哭了……
  5. 采购申请审批策略增强_SAP刘梦_新浪博客
  6. 关于获取计算机唯一ID问题
  7. PAT.A1071 Speech Patterns
  8. node中req.params,req.query,req.body三者的区别
  9. 【图片】机器学习--名画风格 neural-style
  10. SpringBoot 运行机制