LeetCode-in-Java

3633. Earliest Finish Time for Land and Water Rides I

Easy

You are given two categories of theme park attractions: land rides and water rides.

A tourist must experience exactly one ride from each category, in either order.

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:

Plan A gives the earliest finish time of 9.

Example 2:

Input: landStartTime = [5], landDuration = [3], waterStartTime = [1], waterDuration = [10]

Output: 14

Explanation:

Plan A provides the earliest finish time of 14.

Constraints:

Solution

public class Solution {
    public int earliestFinishTime(
            int[] landStartTime, int[] landDuration, int[] waterStartTime, int[] waterDuration) {
        int res = Integer.MAX_VALUE;
        int n = landStartTime.length;
        int m = waterStartTime.length;
        // Try all combinations of one land and one water ride
        for (int i = 0; i < n; i++) {
            // start time of land ride
            int a = landStartTime[i];
            // duration of land ride
            int d = landDuration[i];
            for (int j = 0; j < m; j++) {
                // start time of water ride
                int b = waterStartTime[j];
                // duration of water ride
                int e = waterDuration[j];
                // Case 1: Land → Water
                int landEnd = a + d;
                // wait if needed
                int startWater = Math.max(landEnd, b);
                int finish1 = startWater + e;
                // Case 2: Water → Land
                int waterEnd = b + e;
                // wait if needed
                int startLand = Math.max(waterEnd, a);
                int finish2 = startLand + d;
                // Take the minimum finish time
                res = Math.min(res, Math.min(finish1, finish2));
            }
        }
        return res;
    }
}