1488. 避免洪水泛滥
难度中等61收藏分享切换为英文接收动态反馈
你的国家有无数个湖泊,所有湖泊一开始都是空的。当第 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:
1 | 输入:rains = [1,2,3,4] |
示例 2:
1 | 输入:rains = [1,2,0,0,2,1] |
示例 3:
1 | 输入:rains = [1,2,0,1,2] |
示例 4:
1 | 输入:rains = [69,0,0,0,69] |
示例 5:
1 | 输入:rains = [10,20,20] |
提示:
1 <= rains.length <= 10^5
0 <= rains[i] <= 10^9
通过次数6,005
提交次数26,600
哈希表+二分搜索
使用哈希表保存降雨与水库的关系,key记录水库,value记录哪一天
使用list记录那些没有下雨的日子,当再次下雨到同一个水库就去哈希表中找到这个水库上次下雨的日子$i$,在这个日子之后,如果有哪一天是没有下雨的,在那一天把那个水库抽干(二分查找没下雨的日子中大于$i$且最小的日子将该日子从没下雨日子的列表中清除)
最后要把所有没有用到的0置为1
1 | class Solution { |
参考文献