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;
    }
};
相关推荐
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
weilx12345 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼5 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛5 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
m0_547486665 天前
《数据结构教程》全套 PPT课件2026
数据结构
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光5 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark5 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·5 天前
C++ 萌新语法入门篇
c++·算法比赛