leetcode3635 最早完成陆地和水上游乐设施的时间II

一、问题描述

二、解题思路

(1)方法一:暴力枚举

枚举所有的可能性,初始化ret为INT_MAX,对于每一个(i,j)对(i为陆地项目的下标,j为海洋项目的下标),有2种可能性:

<1>先开始陆地,再开始海洋:time1=max(landstart+landduration,waterstart)+waterduration

<2>先开始海洋,再开始陆地:time2=max(waterstart+waterduration,landstart)+landduration

然后更新ret为min(time1,time2),完成枚举后,ret即为最短的时间,返回即可。

(2)方法二:优化枚举

通过观察我们可以知道,这个最短时间其实只有2种可能,因此我们可以优化枚举

<1>先陆地再海洋:最早结束的陆地项目和所有的海洋项目匹配;

<2>先海洋再陆地:最早结束的海洋项目和所有的陆地项目匹配;

ret即为这2种情况的较小值,时间复杂度由O(n*m)优化为O(n+m);

三、代码实现

(1)方法一:暴力枚举(超时)
cpp 复制代码
class Solution {
public:
    int earliestFinishTime(vector<int>& landStartTime, vector<int>& landDuration, vector<int>& waterStartTime, vector<int>& waterDuration) {
        int ret = INT_MAX;
        for(int i=0;i!=landStartTime.size();i++)
            for(int j=0;j!=waterStartTime.size();j++){
                int landstart= landStartTime[i],landduration=landDuration[i];
                int waterstart=waterStartTime[j],waterduration= waterDuration[j];
                int time1=max(landstart+landduration,waterstart)+waterduration;
                int time2=max(waterstart+waterduration,landstart)+landduration;
                ret=min(ret,min(time1,time2));
            }
        return ret;
    }
};
(2)方法二:优化枚举
cpp 复制代码
class Solution {
public:
    int earliestFinishTime(vector<int>& landStartTime, vector<int>& landDuration, vector<int>& waterStartTime, vector<int>& waterDuration) {
       int ret=INT_MAX;
       //先陆地项目再海洋项目:寻找最早结束的陆地项目->与每一个海洋项目匹配计算
       int landfinish=INT_MAX;
       for(int i=0;i!=landStartTime.size();i++)
            landfinish=min(landfinish,landStartTime[i]+landDuration[i]);
        for(int j=0;j!=waterStartTime.size();j++)
            ret=min(ret,max(landfinish,waterStartTime[j])+waterDuration[j]);

       //先海洋项目再陆地项目:寻找最早结束的海洋项目->与每一个陆地项目匹配计算
        int waterfinish=INT_MAX;
        for(int j=0;j!=waterStartTime.size();j++)
            waterfinish=min(waterfinish,waterStartTime[j]+waterDuration[j]);
        for(int i=0;i!=landStartTime.size();i++)
            ret=min(ret,max(waterfinish,landStartTime[i])+landDuration[i]);

        return ret;
    }
};
相关推荐
apocelipes13 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron14 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩16 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹17 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术21 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰1 天前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
地平线开发者1 天前
J6B vio scenario sample
算法
BothSavage2 天前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法