Maximize reward by scheduling jobs
Company: Airbnb
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
Quick Answer: This question evaluates understanding of weighted interval scheduling, dynamic programming, and efficient algorithm design for large-scale inputs, as well as reasoning about correctness, complexity, and edge cases like identical times or zero-length jobs.
Constraints
- `0 <= n <= 100000`
- `jobs[i] = (start_i, end_i, reward_i)`
- `-2^63 <= start_i, end_i <= 2^63 - 1`
- `start_i <= end_i`
- `0 <= reward_i <= 10^9`
Examples
Input: ([],)
Expected Output: (0, [])
Explanation: There are no jobs to take, so the maximum reward is 0 and the chosen index list is empty.
Input: ([(2, 5, 10)],)
Expected Output: (10, [0])
Explanation: With only one job, the best choice is to take it.
Hints
- Sort jobs by end time so that when you process a job, all potentially compatible earlier jobs are in a prefix.
- For each job, use binary search to find the last job whose end time is less than or equal to the current job's start time, then use dynamic programming to choose between taking or skipping the job.