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;
    }
};
相关推荐
To_OC1 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495642 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
fqbqrr2 小时前
2607C++,soui与安卓
c++·soui
fqbqrr6 小时前
2607C++,使用微软detours勾挂工具
c++
爱刷碗的苏泓舒6 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
蓝悦无人机9 小时前
C++基础 — 函数总结
开发语言·c++
烬羽9 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米9 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记9 小时前
堆(数据结构)
数据结构·