You are given two categories of theme park attractions: land rides and water rides.
landStartTime[i] – the earliest time the ith land ride can be boarded.landDuration[i] – how long the ith land ride lasts.waterStartTime[j] – the earliest time the jth water ride can be boarded.waterDuration[j] – how long the jth water ride lasts.A tourist must experience exactly one ride from each category, in either order.
t, it finishes at time t + duration.Return the earliest possible time at which the tourist can finish both rides.
Example 1:
Input: landStartTime = [2,8], landDuration = [4,1], waterStartTime = [6], waterDuration = [3]
Output: 9
Explanation:
landStartTime[0] = 2. Finish at 2 + landDuration[0] = 6.waterStartTime[0] = 6. Start immediately at 6, finish at 6 + waterDuration[0] = 9.waterStartTime[0] = 6. Finish at 6 + waterDuration[0] = 9.landStartTime[1] = 8. Start at time 9, finish at 9 + landDuration[1] = 10.landStartTime[1] = 8. Finish at 8 + landDuration[1] = 9.waterStartTime[0] = 6. Start at time 9, finish at 9 + waterDuration[0] = 12.waterStartTime[0] = 6. Finish at 6 + waterDuration[0] = 9.landStartTime[0] = 2. Start at time 9, finish at 9 + landDuration[0] = 13.Plan A gives the earliest finish time of 9.
Example 2:
Input: landStartTime = [5], landDuration = [3], waterStartTime = [1], waterDuration = [10]
Output: 14
Explanation:
waterStartTime[0] = 1. Finish at 1 + waterDuration[0] = 11.landStartTime[0] = 5. Start immediately at 11 and finish at 11 + landDuration[0] = 14.landStartTime[0] = 5. Finish at 5 + landDuration[0] = 8.waterStartTime[0] = 1. Start immediately at 8 and finish at 8 + waterDuration[0] = 18.Plan A provides the earliest finish time of 14.
Constraints:
1 <= n, m <= 5 * 104landStartTime.length == landDuration.length == nwaterStartTime.length == waterDuration.length == m1 <= landStartTime[i], landDuration[i], waterStartTime[j], waterDuration[j] <= 105class Solution {
public int earliestFinishTime(int[] landStartTime, int[] landDuration, int[] waterStartTime, int[] waterDuration) {
int t1 = Integer.MAX_VALUE, t2 = Integer.MAX_VALUE;
for (int i = 0; i < landStartTime.length; i++)
t1 = Math.min(t1, landStartTime[i] + landDuration[i]);
for (int i = 0; i < waterStartTime.length; i++)
t2 = Math.min(t2, waterStartTime[i] + waterDuration[i]);
int T1 = Integer.MAX_VALUE, T2 = Integer.MAX_VALUE;
for (int i = 0; i < waterStartTime.length; i++)
T1 = Math.min(T1, Math.max(t1, waterStartTime[i]) + waterDuration[i]);
for (int i = 0; i < landStartTime.length; i++)
T2 = Math.min(T2, Math.max(t2, landStartTime[i]) + landDuration[i]);
return Math.min(T1, T2);
}
}