commit 8fe852d2ebf234eb2f055f22e656fa1e3f8304e8
parent 2d13ae3c0f1eb18bf46ee7f9447698cb47208c60
Author: Jack Sangdahl <jack@pngu.org>
Date: Wed, 3 Jun 2026 09:26:31 -0600
3635. earliest finish time for land and water rides 2
Diffstat:
2 files changed, 88 insertions(+), 0 deletions(-)
diff --git a/earliest_time_finish_land_water2.c b/earliest_time_finish_land_water2.c
@@ -0,0 +1,42 @@
+// 3635. Earliest Finish Time for Land and Water Rides II
+#include "leetcode.h"
+
+/*
+ * you are given two categories of theme park attractions. land rides and water
+ * rides. a tourist must experience exactly one ride from each category. return
+ * the earliest possible time at which the tourist can finish both rides.
+ */
+
+int solve(int *start1, int n, int *duration1, int *start2, int m,
+ int *duration2) {
+ int finish1 = INT_MAX, finish2 = INT_MAX;
+ for (int i = 0; i < n; i++)
+ finish1 = fmin(finish1, start1[i] + duration1[i]);
+ for (int i = 0; i < m; i++)
+ finish2 = fmin(finish2, fmax(start2[i], finish1) + duration2[i]);
+ return finish2;
+}
+
+int earliestFinishTime(int *landStartTime, int landStartTimeSize,
+ int *landDuration, int landDurationSize,
+ int *waterStartTime, int waterStartTimeSize,
+ int *waterDuration, int waterDurationSize) {
+ int land_water = solve(landStartTime, landStartTimeSize, landDuration,
+ waterStartTime, waterStartTimeSize, waterDuration);
+ int water_land = solve(waterStartTime, waterStartTimeSize, waterDuration,
+ landStartTime, landStartTimeSize, landDuration);
+ return fmin(land_water, water_land);
+}
+
+int main() {
+ int lst1[] = {2, 8}, ld1[] = {4, 1}, wst1[] = {6}, wd1[] = {3};
+ int lst2[] = {5}, ld2[] = {3}, wst2[] = {1}, wd2[] = {10};
+ int r1 = earliestFinishTime(lst1, ARRAY_SIZE(lst1), ld1, ARRAY_SIZE(ld1),
+ wst1, ARRAY_SIZE(wst1), wd1, ARRAY_SIZE(wd1));
+ int r2 = earliestFinishTime(lst2, ARRAY_SIZE(lst2), ld2, ARRAY_SIZE(ld2),
+ wst2, ARRAY_SIZE(wst2), wd2, ARRAY_SIZE(wd2));
+ printf("%d\n", r1);
+ assert(r1 == 9);
+ printf("%d\n", r2);
+ assert(r2 == 14);
+}
diff --git a/earliest_time_finish_land_water2.py b/earliest_time_finish_land_water2.py
@@ -0,0 +1,46 @@
+# 3635. Earliest Finish Time for Land and Water Rides II
+from typing import List
+
+"""
+you are given two categories of theme park attractions. land rides and water
+rides. a tourist must experience exactly one ride from each category. return
+the earliest possible time at which the tourist can finish both rides.
+"""
+
+
+class Solution:
+ def earliestFinishTime(
+ self,
+ landStartTime: List[int],
+ landDuration: List[int],
+ waterStartTime: List[int],
+ waterDuration: List[int],
+ ) -> int:
+ def solve(start1, duration1, start2, duration2):
+ finish1, finish2 = float("inf"), float("inf")
+ for i in range(len(start1)):
+ finish1 = min(finish1, start1[i] + duration1[i])
+ for i in range(len(start2)):
+ finish2 = min(finish2, max(start2[i], finish1) + duration2[i])
+ return finish2
+
+ land_water = solve(landStartTime, landDuration, waterStartTime, waterDuration)
+ water_land = solve(waterStartTime, waterDuration, landStartTime, landDuration)
+ return min(land_water, water_land)
+
+
+if __name__ == "__main__":
+ obj = Solution()
+ print(
+ obj.earliestFinishTime(
+ landStartTime=[2, 8],
+ landDuration=[4, 1],
+ waterStartTime=[6],
+ waterDuration=[3],
+ )
+ )
+ print(
+ obj.earliestFinishTime(
+ landStartTime=[5], landDuration=[3], waterStartTime=[1], waterDuration=[10]
+ )
+ )