力扣每日一题----2008. 出租车的最大盈利

news2024/10/7 18:22:16

这题我们是怎么思考的呢? 

已知有乘客最多30000个,有最多100000个地点,那么通过算法时间复杂度,不可能是O(n^2),

那么我们就可以去看题目,题目又是最多盈利多少元?那么很容易联想到动态规划,并且我们又发现该数组排个序之后可以让其递归时某个状态呈现出递推性质,那么我们就确定是动态规划算法了

那么在确定是动态规划算法之后的话,我们该去怎么分析呢?是根据我们的经验去定义吗?

那么我们就以f[i]表示以当前i为下车点的最大值,那么这样去定义可以吗,其实是不太行的,因

为以当前i为结尾的话,我们必须记录第i个为下车点的时候值,如果没有那么就得是f[i] = 0,那么这样就比较麻烦,其实应该也是可以做的,只是这样做很麻烦。

那么我们试想以下这样去定义,f[i]表示在1~i之内接到的乘客的最大利润,那么我们发现,

f[i - 1]表示在1 ~ i - 1之内接到的乘客的最大利润。

枚举乘客

假设当前乘客是a,小于a上车点并且

b下车点 <= a上车点的乘客集合记作b

那么f[a下车点]要保证是最大的话,那么需要知道是否要接上a这个乘客,

如果要接上该乘客的话

    那么我们要保证f[a下车点]是最大的,

    那么就需要找到小于a上车点的最大利润的状态,又分为两种状态

   1.第一种,a乘客一定可以上车

    那么f[a下车点] = max({f[b集合的下车点],b E 1 ~ a上车点}) + 当前乘客的利润

  2.第二种,a乘客一定不能上车

     那么就需要找到小于a上车点的最大利润的状态,

    那么f[a下车点] = max({f[b集合的下车点],b E 1 ~ a上车点}) 

那么总结下来就是枚举当前,看前面

那么我们怎么枚举呢?

按照每个乘客的上车起点升序进行枚举。为什么呢?

那么枚举当前,怎么确保前面的值是最大的呢?用一个堆来维护小于当前st的最大利润

那么该什么时候入堆,什么时候出堆呢?

比如第一个乘客st是1,ed是5,

第二个乘客是st是2,ed是5,

第三个乘客是st是3,ed是7,

我们发现该组数据中,我们的车只能接三个乘客的一种,所以当st小于下车点的时候,

直接入堆即可,当遇到st大于等于下车点话,那么根据key(下车点)的堆进行判断,找到

前面乘客最大下车点(符合当前乘客st>=前面的乘客的最大下车点),找到之后,

就变成   1.第一种,a乘客一定可以上车

如果没有那就  2.第二种,a乘客一定不能上车

class Solution {
public:
    typedef pair<long long,long long> PLL;
    struct CompareFirst {
    bool operator()(const PLL& a, const PLL& b) {
        return a.first > b.first;  // ">" for a min heap, "<" for a max heap
    }
};
    
    long long maxTaxiEarnings(int n, vector<vector<int>> &rides) {
        vector<long long> f(n + 10);

        //按照st大小排序
        sort(rides.begin(), rides.end(), [&](const vector<int> &a, const vector<int> &b) -> bool 
        {
            return a[0] < b[0];
        });
        int m = rides.size();
        
        priority_queue<PLL, vector<PLL>, CompareFirst> pq;
        long long res = 0,maxv = 0;
        for(int i = 0;i < m;i++)
        {
            long long st = rides[i][0],ed = rides[i][1],tip = rides[i][2];
            while(!pq.empty() && pq.top().first <= st)//如果队头的下车时间小于当前的st,那么进行判断
            {
               //判断什么呢,找到比当前st小的最大值
               maxv = max(maxv,pq.top().second);
               pq.pop();
            }

            //找到之后计算出加上当前乘客的利润
            long long curv = maxv + ed - st + tip;
            //加上之后入堆
            res = max(res,curv);
            pq.push({ed,curv});
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1305673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9:00面试,9:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到12月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40…

支持向量机模型(超详细,含案例代码)

什么是支持向量机&#xff1f; 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种在机器学习领域中用于分类和回归分析的强大算法。它是一种监督学习算法&#xff0c;其目标是在特征空间中找到一个超平面&#xff0c;将不同类别的数据点分开&…

Axure元件的介绍使用与登录界面以及个人简历的绘制

目录 一.Axure元件介绍 1.1.简介 1.2.常见的元件 1.3.元件的操作 二.基本元件的使用 2.1.矩形和圆形 2.2.图片 2.3.文本元件 2.4.热区 2.5.线段元件 三.表单型元件的使用 3.1.文本框 3.2.文本域 3.3.下拉列表 3.4.列表框 3.5.单选按钮 3.6.复选框 四.菜单和表…

2007-2022年全国各省数字经济政策支持力度、ZF工作报告数据经济词频数据

2007-2022年全国各省数字经济政策支持力度、ZF工作报告数据经济词频数据, 1、时间&#xff1a;2007-2022年 2、范围&#xff1a;31省市 3、指标&#xff1a;行政区划代码、年份、地区、所属地域、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词频-精确模式、…

dockerfile基于NMP+wordpress创建镜像

内部通信地址 nginx 172.111.0.10 docker-nginx mysql 172.111.0.20 docker-mysql php 172.111.0.30 docker-php 1、创建单独目录 2、创建容器的自定义网络 docker network create --subnet172.111.0.0/16 --opt "com.docker.network.bridge.name"&quo…

19、命令模式(Command Pattern,不常用)

命令模式&#xff0c;将一个请求封装为一个对象&#xff08;命令&#xff09;&#xff0c;使发出请求的责任和执行请求的责任分割开&#xff0c;有效降低系统的耦合度。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行储存、传递、调用、增加与管理。命令…

磁力计LIS2MDL开发(1)----轮询获取磁力计数据

磁力计LIS2MDL开发.1--轮询获取磁力计数据 概述视频教学样品申请源码下载通信模式速率生成STM32CUBEMX串口配置IIC配置CS设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置速率启用偏移消除开启温度补偿设置为连续模式轮询读取数据主程序演示 概述 本文将介绍如何使…

明道云在戴斯克,从业务整合到高效管理的秘诀

内容来自演讲&#xff1a;付震东 | 北京戴斯克商务有限公司 &#xff5c;数字化负责人 摘要 本文介绍了明道云在戴斯克公司的应用以及数字化转型过程中所起的作用。戴斯克公司使用明道云后&#xff0c;实现了系统落地速度、工作效率、决策方法和工作意识的提升。通过不断抽象…

集成开发之如何用好明道云

内容来自演讲&#xff1a;张嵩 | 苏州睿能科技有限公司 | 公司负责人 摘要 这篇文章介绍了作者所在公司如何利用明道云进行集成开发&#xff0c;并分享了四个实际案例。在第一个数字化实验室项目中&#xff0c;该公司使用明道云取代现有的STARLIMS商业软件&#xff0c;并实现…

微表情检测(四)----SL-Swin

SL-Swin: A Transformer-Based Deep Learning Approach for Macro- and Micro-Expression Spotting on Small-Size Expression Datasets 在本文中&#xff0c;我们致力于解决从视频中检测面部宏观和微观表情的问题&#xff0c;并通过使用深度学习方法分析光流特征提出了引人注…

XGBoost和LightGBM时间序列预测对比(备忘)

XGBoost和LightGBM都是目前非常流行的基于决策树的机器学习模型&#xff0c;它们都有着高效的性能表现&#xff0c;但是在某些情况下&#xff0c;它们也有着不同的特点。 XGBoost和LightGBM简单对比 训练速度 LightGBM相较于xgboost在训练速度方面有明显的优势。这是因为Ligh…

【Spring教程26】Spring框架实战:从零开始学习SpringMVC 之 bean加载控制

目录 1 问题分析2 思路分析3 环境准备4 设置bean加载控制5 知识点1&#xff1a;ComponentScan 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装…

智能优化算法应用:基于哈里斯鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于哈里斯鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于哈里斯鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.哈里斯鹰算法4.实验参数设定5.算法结果6.…

【尘缘送书第七期】2023年度盘点:智能汽车 | 自动驾驶 | 车联网

【文末送书】今天推荐几本智能汽车 | 自动驾驶 | 车联网领域优质书籍。 目录 引言1 《智能汽车》2 《SoC底层软件低功耗系统设计与实现》3 《SoC设计指南》4 《蜂窝车联网与网联自动驾驶》5 《智能汽车网络安全权威指南&#xff08;上册&#xff09;》6 《智能汽车网络安全权威…

Keil 编译输出信息分析:Program size: Code, RO-data , RW-data, ZI-data

一般 MCU 包含的存储空间有&#xff1a;片内 Flash 与片内 RAM&#xff0c;RAM 相当于内存&#xff0c;Flash 相当于硬盘。编译器会将一个程序分类为好几个部分&#xff0c;分别存储在 MCU 不同的存储区。 如图所示&#xff0c;在Keil中编译工程成功后&#xff0c;在下面的Bul…

智能优化算法应用:基于闪电搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于闪电搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于闪电搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电搜索算法4.实验参数设定5.算法结果6.…

NCNN 源码学习【二】:模型加载

​ 正文 这次先来看一段NCNN应用代码中&#xff0c;最先出现的部分&#xff0c;模型加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_v1.1.bin");首先我们可以看到一个 ncnn的类Net&am…

【@Cacheable的使用,及设置过期时间 配置方式】

Cacheable的使用&#xff0c;及设置过期时间 配置方式 使用方式 使用方式 Cacheable(cacheNames “ssss#30” ,key “#aaa‘‘#beginTime’’#endTime”) cacheNames/value &#xff1a;用来指定缓存组件的名字key &#xff1a;缓存数据时使用的 key&#xff0c;可以用它来指…

【Oracle】backup备份时报错ORA-19809,ORA-9804

Oracle备份数据库时报错 ORA-19809: limit exceeded for recovery files ORA-19804: cannot reclaim 10305536 bytes disk space from 4385144832 limit 1.清理过时的备份&#xff1a; 使用RMAN删除不再需要的过时备份&#xff0c;以释放空间。执行以下命令&#xff1a; DEL…

模块一——双指针:11.盛最多水的容器

文章目录 题目解析算法原理解法一&#xff1a;暴力枚举(超时&#xff09;解法二&#xff1a;双指针单调性 代码实现暴力枚举(超时&#xff09;双指针单调性(时间复杂度为O(N)&#xff0c;空间复杂度为O(1)&#xff09; 题目解析 题目链接&#xff1a;11.盛最多水的容器 这道题…