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;
    }
};
相关推荐
To_OC7 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
想吃火锅10057 天前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
凌波粒7 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
退休倒计时7 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
小欣加油7 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒7 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode
凌波粒7 天前
LeetCode--46.全排列(回溯算法)
数据结构·算法·leetcode
吃着火锅x唱着歌7 天前
LeetCode 2530.执行K次操作后的最大分数
数据结构·算法·leetcode
sheeta19987 天前
LeetCode 每日一题笔记 日期:2026.06.16 题目:3612. 字符串特殊符号处理
笔记·算法·leetcode
CoderYanger7 天前
A.每日一题:2095. 删除链表的中间节点
java·数据结构·程序人生·leetcode·链表·面试·职场和发展