class Solution: def amountOfTime(self, root: Optional[TreeNode], start: int) -> int: graph = defaultdict(list) def dfs(node): for child in [node.left,node.right]: if child: graph[node.val].append(child.val) graph[child.val].append(node.val) dfs(child) dfs(root) # print(graph) q = deque([[start,0]]) visited = set([start]) time = 0 while q: nodeVal, time = q.popleft() for childval in graph[nodeVal]: if childval not in visited: q.append([childval,time+1]) visited.add(childval) # print(q) # print(visited) return time
classSolution: defgarbageCollection(self, garbage: List[str], travel: List[int]) -> int: M_c,P_c,G_c = 0,0,0 M_t,P_t,G_t = 0,0,0 for i,word inenumerate(garbage): for ch in word: if ch == "M": M_c+=1 M_t = i if ch == "P": P_c+=1 P_t = i if ch == "G": G_c+=1 G_t = i for i inrange(M_t): M_c+=travel[i] for i inrange(P_t): P_c+=travel[i] for i inrange(G_t): G_c+=travel[i] return M_c+P_c+G_c
classSolution: deflongestEqualSubarray(self, nums: List[int], k: int) -> int: pos = defaultdict(list) for i, num inenumerate(nums): pos[num].append(i)
ans = 0 for vec in pos.values(): j = 0 for i inrange(len(vec)): # 缩小窗口,直到不同元素数量小于等于 k while vec[i] - vec[j] - (i - j) > k: j += 1 ans = max(ans, i - j + 1)