Compute Minimum Production Days
Company: Interactive
Role: Data Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
Quick Answer: A data engineering coding screen on greedy scheduling under a cooldown constraint: produce an ordered list of products, one per day, where each product type must cool down for `space` days before it can be produced again. Candidates must return the minimum number of days, ideally in O(n) time using a hash map of last-produced days.
Constraints
- 0 <= len(products) <= 10^6
- 0 <= space <= 10^9
- Each products[i] is an integer product-type id
- Products must be produced strictly in the given order
Examples
Input: ([1, 3, 1, 3, 2], 2)
Expected Output: 6
Explanation: The worked example: 1,3 on days 1-2, an idle day 3 while type 1 cools, then 1,3,2 on days 4-6.
Input: ([], 3)
Expected Output: 0
Explanation: No products to produce, so zero days are needed.
Input: ([5], 10)
Expected Output: 1
Explanation: A single product takes exactly one day regardless of the cooling period.
Input: ([5, 5, 5], 2)
Expected Output: 7
Explanation: All identical: scheduled on days 1, 4, 7 (each waits space=2 full days after the previous), so 7 days total.
Input: ([1, 2, 3, 4], 5)
Expected Output: 4
Explanation: All distinct types never trigger cooling, so each produces on consecutive days 1-4.
Input: ([1, 1, 1], 0)
Expected Output: 3
Explanation: space=0 means no cooling at all, so the answer is just the number of products.
Input: ([7, 7], 1)
Expected Output: 3
Explanation: First 7 on day 1; the second 7 must wait until day 1+1+1=3.
Input: ([2, 2, 3, 2], 1)
Expected Output: 5
Explanation: 2 on day1; 2 cooled to day3; 3 on day4; final 2 earliest is day5 (cooled to 3+1+1=5).
Hints
- Because the order is fixed, delaying a job that could be produced now can never reduce the total time. So schedule every product on the earliest legal day.
- Track the day the most recent job was scheduled (`day`) and, per product type, the last day that type was produced (`last_day[p]`).
- For each product p the earliest valid day is max(day + 1, last_day[p] + space + 1). Update day and last_day[p] to that value, then move on.