leetcode 3633. 最早完成陆地和水上游乐设施的时间 I 简单

给你两种类别的游乐园项目:陆地游乐设施水上游乐设施

  • 陆地游乐设施
    • landStartTime[i] -- 第 i 个陆地游乐设施最早可以开始的时间。
    • landDuration[i] -- 第 i 个陆地游乐设施持续的时间。
  • 水上游乐设施
    • waterStartTime[j] -- 第 j 个水上游乐设施最早可以开始的时间。
    • waterDuration[j] -- 第 j 个水上游乐设施持续的时间。

一位游客必须从 每个 类别中体验 恰好 一个 游乐设施,顺序 不限

  • 游乐设施可以在其开放时间开始,或 之后任意时间开始。
  • 如果一个游乐设施在时间 t 开始,它将在时间 t + duration 结束。
  • 完成一个游乐设施后,游客可以立即乘坐另一个(如果它已经开放),或者等待它开放。

返回游客完成这两个游乐设施的 最早可能时间

示例 1:

**输入:**landStartTime = 2,8, landDuration = 4,1, waterStartTime = 6, waterDuration = 3

**输出:**9

解释:

  • 方案 A(陆地游乐设施 0 → 水上游乐设施 0):
    • 在时间 landStartTime[0] = 2 开始陆地游乐设施 0。在 2 + landDuration[0] = 6 结束。
    • 水上游乐设施 0 在时间 waterStartTime[0] = 6 开放。立即在时间 6 开始,在 6 + waterDuration[0] = 9 结束。
  • 方案 B(水上游乐设施 0 → 陆地游乐设施 1):
    • 在时间 waterStartTime[0] = 6 开始水上游乐设施 0。在 6 + waterDuration[0] = 9 结束。
    • 陆地游乐设施 1 在 landStartTime[1] = 8 开放。在时间 9 开始,在 9 + landDuration[1] = 10 结束。
  • 方案 C(陆地游乐设施 1 → 水上游乐设施 0):
    • 在时间 landStartTime[1] = 8 开始陆地游乐设施 1。在 8 + landDuration[1] = 9 结束。
    • 水上游乐设施 0 在 waterStartTime[0] = 6 开放。在时间 9 开始,在 9 + waterDuration[0] = 12 结束。
  • 方案 D(水上游乐设施 0 → 陆地游乐设施 0):
    • 在时间 waterStartTime[0] = 6 开始水上游乐设施 0。在 6 + waterDuration[0] = 9 结束。
    • 陆地游乐设施 0 在 landStartTime[0] = 2 开放。在时间 9 开始,在 9 + landDuration[0] = 13 结束。

方案 A 提供了最早的结束时间 9。

示例 2:

**输入:**landStartTime = 5, landDuration = 3, waterStartTime = 1, waterDuration = 10

**输出:**14

解释:

  • 方案 A(水上游乐设施 0 → 陆地游乐设施 0):
    • 在时间 waterStartTime[0] = 1 开始水上游乐设施 0。在 1 + waterDuration[0] = 11 结束。
    • 陆地游乐设施 0 在 landStartTime[0] = 5 开放。立即在时间 11 开始,在 11 + landDuration[0] = 14 结束。
  • 方案 B(陆地游乐设施 0 → 水上游乐设施 0):
    • 在时间 landStartTime[0] = 5 开始陆地游乐设施 0。在 5 + landDuration[0] = 8 结束。
    • 水上游乐设施 0 在 waterStartTime[0] = 1 开放。立即在时间 8 开始,在 8 + waterDuration[0] = 18 结束。

方案 A 提供了最早的结束时间 14。

提示:

  • 1 <= n, m <= 100
  • landStartTime.length == landDuration.length == n
  • waterStartTime.length == waterDuration.length == m
  • 1 <= landStartTime[i], landDuration[i], waterStartTime[j], waterDuration[j] <= 1000

分析:暴力枚举所有水上项目和陆地项目的组合。可以先玩陆地项目再玩水上项目,也可以反过来,分别计算这两种顺序下的最优结果,然后取其中的最小值。以"先陆地、后水上"为例,计算逻辑如下:

对于陆地项目,分别计算它的开始时间 + 持续时间。准备玩第二个项目时,会遇到两种情况:

若水上项目已经开放,则可以立即开始,完成时刻就是第一个项目的结束时间 + 水上项目的持续时间。若水上项目还没开放,则必须等到它开始才能玩,完成时刻就是水上项目的开始时间 + 水上项目的持续时间。再交换顺序,按照同样的方法计算先水上、后陆地的最早完成时间。

cpp 复制代码
class Solution {
public:
    int earliestFinishTime(vector<int>& landStartTime, vector<int>& landDuration, vector<int>& waterStartTime, vector<int>& waterDuration) {
        int n=landStartTime.size(),m=waterStartTime.size(),ans=100000;
        for(int i=0;i<n;++i)
        {
            int temp=landStartTime[i]+landDuration[i];
            for(int j=0;j<m;++j)
            {
                if(waterStartTime[j]<=temp)ans=min(ans,temp+waterDuration[j]);
                else ans=min(waterStartTime[j]+waterDuration[j],ans);
            }
        }
        for(int i=0;i<m;++i)
        {
            int temp=waterStartTime[i]+waterDuration[i];
            for(int j=0;j<n;++j)
            {
                if(landStartTime[j]<=temp)ans=min(ans,temp+landDuration[j]);
                else ans=min(landStartTime[j]+landDuration[j],ans);
            }
        }
        return ans;
    }
};
相关推荐
伊玛目的门徒5 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
旖-旎9 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
怪兽学LLM12 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:分治递归思路详解
算法·leetcode·职场和发展
退休倒计时13 小时前
【每日一题】LeetCode 39. 组合总和 TypeScript
算法·leetcode·typescript
Scabbards_13 小时前
面试Leetcode - Array
leetcode·面试·职场和发展
兰令水15 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
Tisfy15 小时前
LeetCode 1291.顺次数:打表/枚举
算法·leetcode·题解·枚举·遍历
罗超驿17 小时前
双指针算法详解:从入门到精通(Java版)
算法·leetcode·职场和发展
tkevinjd17 小时前
力扣300-最长递增子序列
算法·leetcode·职场和发展·动态规划·贪心
aqiu11111119 小时前
【算法日记20】LeetCode 438. 找到所有字母异位词:定长滑动窗口的极致优雅
算法·leetcode·职场和发展