Merge Overlapping Time Windows
ByteDanceSoftware Engineer · Technical ScreenLast updated
Merge unsorted half-open time windows into sorted, non-overlapping intervals while leaving merely adjacent windows separate. Handle duplicate and nested ranges, large timestamps, large input, and empty collections under exact boundary semantics.
Problem
Merge a collection of time windows so that the output contains sorted, non-overlapping half-open intervals. A window [start, end) includes start and excludes end; therefore adjacent windows [1, 3) and [3, 5) do not overlap and remain separate.
Function Contract
Implement mergeTimeWindows(windows).
Constraints & Assumptions
0 <= len(windows) <= 200,000.0 <= start < end <= 10^12.- Windows may be unsorted, duplicated, or nested.
- Output uses the same half-open semantics.
Clarifying Questions to Ask
- Do adjacent windows merge? No, only positive-duration overlap merges them.
- How should duplicates be handled? One copy remains after merging.
- Is stable ordering among identical starts important? No.
- Should invalid windows be skipped? No; inputs are valid.
Example
input = [[1,3], [2,6], [8,10], [10,12]]
output = [[1,6], [8,10], [10,12]]
Evaluation Focus
- Distinguishes overlap from adjacency under half-open semantics.
- Extends the end with
max(currentEnd, nextEnd)for nested windows. - Produces sorted disjoint output.
- Runs in
O(n log n)time.
Extensions to Discuss
- How would the output change under closed-interval semantics?
- How would you compute the total covered duration?
- Which structure supports online insertion and coverage queries?
Hints
Hint 1
Compare with the last merged end: After sorting, overlap exists exactly when the next start is strictly less than the current merged end.
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.