Kahn's with a uniqueness check
Time O(n + total sequence length) Space O(n + edges)Add edges from consecutive pairs. While the queue is non-empty: if it has more than one node, return false; the popped node must equal nums at that position.
import java.util.*;
class Solution {
public boolean sequenceReconstruction(int[] nums, List<List<Integer>> sequences) {
int n = nums.length;
List<Set<Integer>> adj = new ArrayList<>();
for (int i = 0; i <= n; i++) adj.add(new HashSet<>());
int[] indeg = new int[n + 1];
for (List<Integer> s : sequences)
for (int i = 0; i + 1 < s.size(); i++)
if (adj.get(s.get(i)).add(s.get(i + 1))) indeg[s.get(i + 1)]++;
Deque<Integer> q = new ArrayDeque<>();
for (int v = 1; v <= n; v++) if (indeg[v] == 0) q.offer(v);
int idx = 0;
while (!q.isEmpty()) {
if (q.size() > 1) return false;
int u = q.poll();
if (nums[idx++] != u) return false;
for (int v : adj.get(u)) if (--indeg[v] == 0) q.offer(v);
}
return idx == n;
}
}Verdict: Uniqueness falls out of the queue size.