diff --git a/src/algorithms/graph.py b/src/algorithms/graph.py index 777ea3b..5459134 100644 --- a/src/algorithms/graph.py +++ b/src/algorithms/graph.py @@ -52,15 +52,9 @@ def find_last_node(nodes, edges): def find_leaf_nodes(nodes: list[dict], edges: list[dict]) -> list[dict]: """Find all leaf nodes (nodes with no outgoing edges).""" - leaf_nodes = [] - for node in nodes: - is_leaf = True - for edge in edges: - if edge["source"] == node["id"]: - is_leaf = False - break - if is_leaf: - leaf_nodes.append(node) + # Build a set of sources for O(1) membership tests instead of nested loops + sources = {edge["source"] for edge in edges} + leaf_nodes: list[dict] = [node for node in nodes if node["id"] not in sources] return leaf_nodes