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;
    }
};
相关推荐
fqq320 分钟前
力扣刷题前置Java语法
算法·leetcode·职场和发展
小小龙学IT1 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
知无不研2 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
半夏微凉半夏殇3 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_906565123 小时前
数学之美探究
算法
oier_Asad.Chen3 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
C++ 老炮儿的技术栈4 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
leisoo80975 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
qz_Serene6 小时前
C++:类和对象(上)
开发语言·c++
luj_17687 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法