1488.避免洪水泛滥
链接:1488.避免洪水泛滥
难度:Medium
标签:贪心、数组、哈希表、二分查找、堆(优先队列)
简介:如果有多种可行解,请返回它们中的 任意一个 。如果没办法阻止洪水,请返回一个 空的数组 。请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。但如果你选择抽干一个空的湖泊,那么将无事发生。
题解 1 - python
- 编辑时间:2023-10-13
- 执行用时:3896ms
- 内存消耗:31.44MB
- 编程语言:python
- 解法介绍:记录前一次蓄满水后,最近的放空时间。
class Solution:
    def avoidFlood(self, rains: List[int]) -> List[int]:
        full = dict()
        empty = []
        res = [-1] * len(rains)
        for i, rain in enumerate(rains):
            if rain == 0:
                empty.append(i)
            elif rain not in full:
                full[rain] = i
            else:
                l = bisect_left(empty, full[rain])
                if l == len(empty):
                    return []
                res[empty[l]] = rain
                full[rain] = i
                empty.pop(l)
        for o in empty:
            res[o] = 1
        return res