Merchant Capacity Interval Merge
Problem statement
What the interview report shared
The interview report asked for intervals to be merged according to merchant. Each interval included capacity and time-limit information, and the output was categorized by merchant.
Task
Interval records are supplied through equal-length arrays. At index i, merchantIds[i], startTimes[i], endTimes[i], and capacities[i] describe a half-open interval [startTimes[i], endTimes[i]) with a fixed capacity.
For every pair of merchant and capacity, merge intervals that overlap or touch. Intervals with different merchants or different capacities never merge, and a merged interval retains its shared capacity.
Return one row [merchantId, startTime, endTime, capacity] for every merged interval. Sort the rows by merchant identifier, then start time, end time, and capacity, all in ascending order.
Function
mergeMerchantIntervals(merchantIds: int[], startTimes: int[], endTimes: int[], capacities: int[]) → int[][]Examples
Example 1
merchantIds = [7,7,7,8]startTimes = [1,4,3,0]endTimes = [4,6,5,2]capacities = [10,10,20,5]return = [[7,1,6,10],[7,3,5,20],[8,0,2,5]]The capacity-10 intervals for merchant 7 touch and become [1,6). Its capacity-20 interval stays separate. Merchant 8 forms its own category.
Example 2
merchantIds = [2,2,2]startTimes = [8,1,3]endTimes = [10,3,8]capacities = [4,4,4]return = [[2,1,10,4]]After ordering the records by time, all three capacity-4 intervals touch and merge into one interval.
Example 3
merchantIds = [3,1,3]startTimes = [5,2,1]endTimes = [7,4,2]capacities = [9,6,9]return = [[1,2,4,6],[3,1,2,9],[3,5,7,9]]Rows are categorized by merchant. The two merchant-3 intervals have the same capacity but remain separate because they neither overlap nor touch.
Constraints
0 <= merchantIds.length <= 100000startTimes.length,endTimes.length, andcapacities.lengthequalmerchantIds.length.1 <= merchantIds[i] <= 10^90 <= startTimes[i] < endTimes[i] <= 10^91 <= capacities[i] <= 10^9