Simulate stack traces from logs
Company: Anthropic
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Onsite
Quick Answer: This question evaluates stack-based simulation for computing exclusive execution time in nested function call logs and stream-processing concepts for handling equal timestamps, slight reordering, and detection of N consecutive categorical events.
Part 1: Exclusive execution time from nested logs
Constraints
- 0 <= len(logs) <= 2 * 10^5
- Each log is a tuple `(id, event, timestamp)`
- `event` is either `'START'` or `'END'`
- Timestamps are integers and may be equal
- The given log order is valid and represents properly nested calls
Examples
Input: ([(0, 'START', 0), (1, 'START', 2), (1, 'END', 5), (0, 'END', 6)],)
Expected Output: {0: 3, 1: 3}
Explanation: Function 0 runs from 0 to 2, function 1 runs from 2 to 5, then function 0 resumes from 5 to 6.
Input: ([(2, 'START', 1), (2, 'END', 4), (5, 'START', 4), (5, 'END', 7)],)
Expected Output: {2: 3, 5: 3}
Explanation: Two top-level calls run back-to-back with no nesting.
Hints
- Keep a stack of currently active function calls.
- When a new log at time `t` arrives, the function on top of the stack has been running since the previous timestamp.
Part 2: Online exclusive time with equal timestamps and slightly out-of-order logs
Constraints
- 0 <= len(logs) <= 2 * 10^5
- 0 <= max_delay <= len(logs)
- Each log is a tuple `(id, event, timestamp)`
- `event` is either `'START'` or `'END'`
- Each log is at most `max_delay` positions later than its correct position in the stable timestamp order
- After stable sorting by `(timestamp, arrival_index)`, the call sequence is valid and properly nested
Examples
Input: ([(0, 'START', 0), (1, 'END', 5), (1, 'START', 2), (0, 'END', 6)], 1)
Expected Output: {0: 3, 1: 3}
Explanation: The middle two logs are swapped in arrival order. A buffer of size 2 restores the chronological order.
Input: ([(0, 'START', 0), (1, 'START', 2), (1, 'END', 2), (0, 'END', 5)], 0)
Expected Output: {0: 5, 1: 0}
Explanation: Equal timestamps are allowed. Function 1 starts and ends at the same time, so it contributes 0.
Hints
- If every item is at most `k` positions late, a min-heap of size `k + 1` can emit the next correct item online.
- Once a corrected log is emitted, the exclusive-time accounting is the same stack-based idea as in Part 1.
Part 3: Earliest run of N identical consecutive events
Constraints
- 0 <= len(events) <= 2 * 10^5
- 1 <= N <= 2 * 10^5
- Event values only need to support equality comparison
- Indices are 0-based
Examples
Input: (['INFO', 'WARN', 'WARN', 'WARN', 'ERROR'], 3)
Expected Output: 1
Explanation: The earliest run of length 3 is `'WARN', 'WARN', 'WARN'`, starting at index 1.
Input: ([1, 1, 2, 2, 2, 2], 4)
Expected Output: 2
Explanation: The value 2 appears four times consecutively starting at index 2.
Hints
- You do not need a sliding-window frequency map; only the current run matters.
- As soon as the current run length reaches `N`, you have found the earliest valid start.