diff --git a/leetcode_690.py b/leetcode_690.py new file mode 100644 index 0000000..485406d --- /dev/null +++ b/leetcode_690.py @@ -0,0 +1,12 @@ +class Solution: + def getImportance(self, employees: List['Employee'], id: int) -> int: + emp_map = {e.id: e for e in employees} + + def dfs(emp_id): + emp = emp_map[emp_id] + total = emp.importance + for sub in emp.subordinates: + total += dfs(sub) + return total + + return dfs(id) \ No newline at end of file diff --git a/leetcode_994.py b/leetcode_994.py new file mode 100644 index 0000000..d2492e2 --- /dev/null +++ b/leetcode_994.py @@ -0,0 +1,32 @@ +class Solution: + def orangesRotting(self, grid: List[List[int]]) -> int: + rows, cols = len(grid), len(grid[0]) + q = deque() + fresh = 0 + + # Step 1: count fresh & enqueue rotten + for r in range(rows): + for c in range(cols): + if grid[r][c] == 2: + q.append((r, c)) + elif grid[r][c] == 1: + fresh += 1 + + minutes = 0 + directions = [(1,0), (-1,0), (0,1), (0,-1)] + + # Step 2: BFS + while q and fresh > 0: + for _ in range(len(q)): + r, c = q.popleft() + + for dr, dc in directions: + nr, nc = r + dr, c + dc + if 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 1: + grid[nr][nc] = 2 + fresh -= 1 + q.append((nr, nc)) + minutes += 1 + + return minutes if fresh == 0 else -1 + \ No newline at end of file