educative.io

My solutionnnnn

Just to remark that you don’t need to waste space in the sortedOrder array.

from collections import deque, defaultdict


def can_construct(originalSeq, sequences):
  incoming = defaultdict(int)
  outgoing = defaultdict(list)
  elements = set()
  for seq in sequences:
    for i in range(len(seq) - 1):
      parent = seq[i]
      child = seq[i + 1]
      elements.add(parent)
      elements.add(child)
      incoming[child] += 1
      outgoing[parent].append(child)

  sources = deque()
  for e in elements:
    if incoming[e] == 0:
      sources.append(e)

  next_in_original = 0
  while sources:
    v = sources.popleft()
    if sources or next_in_original >= len(originalSeq) or v != originalSeq[next_in_original]:
      return False
    next_in_original += 1
    for e in outgoing[v]:
      incoming[e] -= 1
      if incoming[e] == 0:
        sources.append(e)

  return next_in_original == len(originalSeq)

Type your question above this line.

Course: https://www.educative.io/collection/5668639101419520/5671464854355968
Lesson: https://www.educative.io/collection/page/5668639101419520/5671464854355968/6460939912085504

Yes, your solution seems fine.

1 Like