【周赛总结】第194场周赛——保证文件名唯一,洪水泛滥,最小生成树

未参加的比赛,感觉leetcode的比赛确实越来越难了

第二题 保证文件名唯一

【周赛总结】第194场周赛——保证文件名唯一,洪水泛滥,最小生成树_第1张图片

一道有意思的题目,要求对相同名字的文件添加序号。
我们需要考虑减小复杂度,也就是每次遇到重复的文件名时候,需要维护一个字典去存储该文件名已经命名到了哪个序列。

class Solution:
    def getFolderNames(self, names: List[str]) -> List[str]:
        if not names:
            return []
         # 存储每个文件名字,对应的序号
        dic = collections.defaultdict(int)
        has = set()
        ans = []
        for i in names:
        	# 不是新的文件名
            if i in has:
                k = dic[i]
                cur = i+"("+ str(k)+')'
                while cur in has:
                    k += 1
                    cur = i+"("+ str(k)+')'
                dic[i] = k
             # 是新的文件名
            else:
                cur = i
            # 每次都会产生一个新的文件名族,和添加新的文件
            dic[cur] = 1
            ans.append(cur)
            has.add(cur)
        return ans

第三题 避免洪水泛滥

【周赛总结】第194场周赛——保证文件名唯一,洪水泛滥,最小生成树_第2张图片

也是一道合理设计结构的题目,有一点类似贪心的思路。比较巧妙之处在于理解题意,题目给出了要求,不让洪水泛滥,因此我们在每天抽干时候,可以选择最紧急的一个。

因此我们要找到每个湖泊对应的下一天下雨的时间,这里采用倒叙遍历的方法,用字典每次更新下每个湖泊下雨的日子,数组存储了当天的湖泊,在哪一天赢来下一次下雨
之后我们借助一个最小堆,每次遇到不下雨的时候,从最小堆中选取最紧急的抽水即可。

class Solution:
    def avoidFlood(self, rains: List[int]) -> List[int]:
        has = set()
        ans = []
        n = len(rains)
        next = [n+1]*n
        cur = {}
        search = []
        heapq.heapify(search)
        for i in range(n-1,-1,-1):
            if rains[i]:
                if rains[i] in cur:
                    next[i] = cur[rains[i]]
                cur[rains[i]] = i          
        print(next)
        for i in range(n):
            if rains[i] != 0:
                if rains[i] in has:
                    return []
                ans.append(-1)
                heapq.heappush(search, (next[i], rains[i]))
                has.add(rains[i])
            else:
                if search:
                    _, cur = heapq.heappop(search)
                    ans.append(cur)
                    has.remove(cur)
                else:
                    ans.append(1)

        return ans

你可能感兴趣的:(周赛总结)