Easy
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 <= 100landStartTime.length == landDuration.length == nwaterStartTime.length == waterDuration.length == m1 <= landStartTime[i], landDuration[i], waterStartTime[j], waterDuration[j] <= 1000import kotlin.math.max
import kotlin.math.min
class Solution {
fun earliestFinishTime(
landStartTime: IntArray,
landDuration: IntArray,
waterStartTime: IntArray,
waterDuration: IntArray,
): Int {
var res = Int.Companion.MAX_VALUE
val n = landStartTime.size
val m = waterStartTime.size
// Try all combinations of one land and one water ride
for (i in 0..<n) {
// start time of land ride
val a = landStartTime[i]
// duration of land ride
val d = landDuration[i]
for (j in 0..<m) {
// start time of water ride
val b = waterStartTime[j]
// duration of water ride
val e = waterDuration[j]
// Case 1: Land → Water
val landEnd = a + d
// wait if needed
val startWater = max(landEnd, b)
val finish1 = startWater + e
// Case 2: Water → Land
val waterEnd = b + e
// wait if needed
val startLand = max(waterEnd, a)
val finish2 = startLand + d
// Take the minimum finish time
res = min(res, min(finish1, finish2))
}
}
return res
}
}