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;
    }
};
相关推荐
inrichtt10 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger11 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训11 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen11 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy11 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据12 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓12 小时前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
把我格子衫拿来12 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃12 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
erzong23113 小时前
Linux操作系统:线程概念与控制
linux·算法