Check if each prefix forms 1..k permutation
Company: Uber
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: hard
Interview Round: Take-home Project
Quick Answer: This question evaluates algorithmic thinking and understanding of permutations and prefix invariants, measuring the ability to recognize when the first k elements of a permutation can form the set {1..k}.
Constraints
- 1 <= n <= 2 * 10^5
- arr is a permutation of the integers 1..n (each appears exactly once)
Examples
Input: ([5, 3, 1, 2, 4],)
Expected Output: [0, 0, 0, 0, 1]
Explanation: Running max after each step: 5,5,5,5,5; prefix lengths 1,2,3,4,5. Only k=5 has running_max==k, so only the full array is a permutation of [1..5].
Input: ([1, 2, 3, 4, 5],)
Expected Output: [1, 1, 1, 1, 1]
Explanation: Already sorted; the running max equals the prefix length at every step, so every prefix is a permutation of [1..k].
Input: ([1],)
Expected Output: [1]
Explanation: Single element [1] is the permutation of [1].
Input: ([2, 1],)
Expected Output: [0, 1]
Explanation: k=1: max=2 != 1 → 0. k=2: max=2 == 2 → 1 ({2,1} = {1,2}).
Input: ([1, 3, 2, 5, 4],)
Expected Output: [1, 0, 1, 0, 1]
Explanation: Running max: 1,3,3,5,5 vs k=1,2,3,4,5. Equal at k=1 (=>1), k=3 (=>1), k=5 (=>1); not at k=2 or k=4.
Input: ([3, 1, 2, 4],)
Expected Output: [0, 0, 1, 1]
Explanation: Running max: 3,3,3,4 vs k=1,2,3,4. First prefix that is exactly {1..k} appears at k=3 ({3,1,2}={1,2,3}), then k=4.
Hints
- Sorting each prefix is O(n^2 log n) overall — too slow. Look for an O(n) invariant you can maintain while scanning once.
- The first k elements are always k distinct values from 1..n. What single statistic of those values tells you whether they are exactly {1..k}?
- If the maximum of the first k elements equals k, then k distinct values all <= k must be precisely 1..k. Track a running maximum and compare it to the current prefix length.