Compute concurrent online drivers
Company: Rippling
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: Medium
Interview Round: Technical Screen
Quick Answer: This question evaluates proficiency in algorithms and temporal data handling, including the use of efficient search techniques and complexity reasoning to count distinct active drivers over a sliding 24-hour window.
Constraints
- 0 <= N == len(drivers) <= 200000
- Sum of all intervals across all drivers <= 1000000
- For each driver, intervals are sorted by start ascending and are non-overlapping
- Intervals use inclusive endpoints: start <= end
- Timestamps are integers: -10^15 <= start, end, t <= 10^15
- Return value is in [0, N]
Solution
def count_online_drivers(drivers, t):
window_start = t - 86400
window_end = t
count = 0
for intervals in drivers:
if not intervals:
continue
# Binary search for rightmost interval with start <= window_end
lo, hi = 0, len(intervals) - 1
idx = -1
while lo <= hi:
mid = (lo + hi) // 2
if intervals[mid][0] <= window_end:
idx = mid
lo = mid + 1
else:
hi = mid - 1
if idx != -1 and intervals[idx][1] >= window_start:
count += 1
return countExplanation
Time complexity: O(D log K_avg), where D is the number of drivers and K_avg is the average number of intervals per driver. Space complexity: O(1) additional space.
Hints
- A driver is counted if there exists an interval [s,e] with s <= t and e >= t-86400.
- Because intervals are sorted and non-overlapping, only the last interval with start <= t needs to be checked for overlap with the window.
- Use binary search per driver to find the rightmost interval whose start <= t, then verify if its end >= t-86400.