题目:原题链接(中等)
标签:哈希表、数组、二分查找
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
Ans 1 (Python) | O ( N l o g N ) | O ( N ) | 388ms (86.51%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def avoidFlood(self, rains: List[int]) -> List[int]:
sunny_dic = []
rain_dic = {}
ans = []
for i, rain in enumerate(rains):
if rain > 0:
# 处理湖里已经有积水的情况,逆转时空,强行排水
if rain in rain_dic:
i1 = rain_dic[rain] # 上次下雨的日期
i2 = bisect.bisect_left(sunny_dic, i1) # 计算排水的日期(贪心选择更早的日期)
# 已经没有时间排水了
if i2 == len(sunny_dic):
return []
i3 = sunny_dic[i2]
# print(sunny_dic, i1, "->", i2, "->", i3)
# 处理成功排水的情况
sunny_dic.pop(i2)
ans[i3] = rain
del rain_dic[rain]
rain_dic[rain] = i
ans.append(-1)
else:
sunny_dic.append(i)
ans.append(1)
# print(i, ans)
return ans