Skip to content

Commit 532dc71

Browse files
committed
Sync LeetCode submission Runtime - 27 ms (89.00%), Memory - 23.4 MB (87.40%)
1 parent ecd157d commit 532dc71

File tree

1 file changed

+28
-34
lines changed

1 file changed

+28
-34
lines changed
Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,39 @@
1-
# Approach 2: Depth First Search
1+
# Approach: Depth First Search
22

3-
# Time: O(m + n), n = no. of nodes, m = no. of edges
4-
# Space: O(m + n)
3+
# V = no. of vertices, E = no. of edges
4+
# Time: O(V + E)
5+
# Space: O(V)
56

67
class Solution:
7-
# returns boolean indicating whether `node` is unsafe
8-
def dfs(self, node, adj, visit, in_stack) -> bool:
9-
if in_stack[node]:
10-
return True
11-
12-
if visit[node]:
13-
return False
8+
def eventualSafeNodes(self, graph: List[List[int]]) -> List[int]:
9+
n = len(graph)
10+
# 0: unvisited, 1: visiting, 2: safe
11+
state = [0] * n
12+
safe = []
1413

15-
visit[node] = True
16-
in_stack[node] = True
14+
def dfs(node):
15+
# If node is being visited, we found a cycle
16+
if state[node] == 1:
17+
return False
1718

18-
for neighbor in adj[node]:
19-
if self.dfs(neighbor, adj, visit, in_stack):
19+
# If node has been fully visited, return if it's safe
20+
if state[node] == 2:
2021
return True
2122

22-
in_stack[node] = False
23-
return False
23+
# Mark node as being visited
24+
state[node] = 1
2425

26+
for neighbor in graph[node]:
27+
if not dfs(neighbor):
28+
return False
2529

26-
def eventualSafeNodes(self, graph: List[List[int]]) -> List[int]:
27-
n = len(graph)
28-
adj = [[] for _ in range(n)]
29-
30-
for i in range(n):
31-
for node in graph[i]:
32-
adj[i].append(node)
33-
34-
visit = [False] * n
35-
in_stack = [False] * n
36-
37-
for i in range(n):
38-
self.dfs(i, adj, visit, in_stack)
30+
# Mark node as safe
31+
state[node] = 2
32+
return True
3933

40-
safe_nodes = []
4134
for i in range(n):
42-
if not in_stack[i]:
43-
safe_nodes.append(i)
44-
45-
return safe_nodes
35+
if dfs(i):
36+
safe.append(i)
37+
38+
return safe
39+

0 commit comments

Comments
 (0)