当前位置: 首页 > news >正文

力扣(LeetCode)2008. 出租车的最大盈利(C语言)

一、环境说明

  1. 本文是 LeetCode 2008题 : 出租车的最大盈利,使用c语言实现。
  2. 动态规划。
  3. 测试环境:Visual Studio 2019。

二、代码展示

#define Max(a,b) ((a)>(b)?(a):(b))
int cmp(const void *a,const void *b){
    return (*((int**)a))[1] - (*((int**)b))[1];//按照end升序
}
long long maxTaxiEarnings(int n, int** rides, int ridesSize, int* ridesColSize){
    qsort(rides,ridesSize,sizeof(rides[0]),cmp);//按照end升序
    int i = 1,j=0;//遍历的两个位置
    long long dp[n+1];//最大dp[n]
    memset(dp,0,sizeof(long long)*n);//初始化dp为0
    while(i<=n){//一直遍历到dp[n]
        dp[i]=dp[i-1];
        while(j<ridesSize&&i==rides[j][1]){//j用于遍历rides。当终点i==rides[j][1]时,说明需要更新dp了。
            int end =rides[j][1];//终点
            int start = rides[j][0];//起点
            int tips = rides[j][2];//小费
            dp[i]=Max(dp[i],dp[start]+end - start +tips);
            j++;//找下一个j//这里可以二分查找优化//参考1235题官解。
        }
        i++;
    }
    return dp[n];
}

三、思路分析

  • 动态规划。
  • 分析怎么设计 d p dp dp。区间动态规划的较好处理是:遍历 r i d e s rides rides,找目前最早的结束地点 e n d end end
  1. 同时遍历 n n n r i d e s rides rides,用 i i i表示 n n n当前位置,用 j j j表示 r i d e s rides rides当前位置。
  2. 我们对 r i d e s rides rides e n d end end升序快排,当前位置 j j j就是目前最早的 e n d end end
  3. f [ i ] f[i] f[i] i i i位置前的最大盈利。对于位置 i i i,最大盈利 f [ i ] f[i] f[i]可能等于 f [ i − 1 ] f[i-1] f[i1],也可能等于 f [ j ] + e n d − s t a r t + t i p s f[j]+end-start+tips f[j]+endstart+tips,所以设计 f [ i ] = M a x ( f [ i − 1 ] , f [ j ] + e n d − s t a r t + t i p s ) f[i]=Max(f[i-1],f[j]+end-start+tips) f[i]=Max(f[i1],f[j]+endstart+tips) j j j是以 i i i作为 e n d end end的一个起始地点。
  4. 提示: i i i之前上车的顾客,可能不止一个人在 i i i下车。所以我们用 j j j遍历 r i d e s rides rides,确保每个顾客都被考虑。

四、代码分析

  • 理解思路很重要!
  • 欢迎读者在评论区留言,作为日更博主,看到就会回复的。

五、AC

AC
ac
第一次双百。

六、复杂度分析

  1. 时间复杂度: O ( n + m l o g m ) O(n+mlogm) O(n+mlogm) , n n n n n n的大小, m m m r i d e s rides rides的大小。快排 r i d e s rides rides,遍历字符串 n 、 r i d e s n、rides nrides的时间复杂度是 O ( m l o g m + n + m ) O(mlogm+n+m) O(mlogm+n+m)
  2. 空间复杂度: O ( n ) O(n) O(n), d p [ n ] dp[n] dp[n]的空间复杂度 O ( n ) O(n) O(n)

相关文章:

  • 【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片
  • 四非到保研厦大,我们还有多少路要走----技术人的保研之路
  • 美团Leaf分布式ID源码启动部署
  • 归一化小程序
  • 走过岁月我才发现——云IDE真方便(Python3.8环境测试)
  • SpringBoot核心技术 之 基础入门
  • Linux下编译工具:gcc/g++ の最全使用教程
  • 【计算机视觉】imutils的基本使用
  • Vue--nextTick--作用/用法/原理
  • 自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
  • 计算机网络习题答案
  • js中的‘==‘和‘===‘
  • 一起来部署项目-采购一台云服务器
  • 【老生谈算法】matlab实现抽样定理算法源码——抽样定理
  • [从0开始机器学习]4.线性回归 正规方程
  • 2017届校招提前批面试回顾
  • dva中组件的懒加载
  • Java面向对象及其三大特征
  • Linux CTF 逆向入门
  • PHP CLI应用的调试原理
  • webgl (原生)基础入门指南【一】
  • windows下使用nginx调试简介
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 安装python包到指定虚拟环境
  • 当SetTimeout遇到了字符串
  • 动态规划入门(以爬楼梯为例)
  • 记录一下第一次使用npm
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何使用 JavaScript 解析 URL
  • 使用权重正则化较少模型过拟合
  • 一道面试题引发的“血案”
  • 进程与线程(三)——进程/线程间通信
  • ​【已解决】npm install​卡主不动的情况
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #Spring-boot高级
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (9)STL算法之逆转旋转
  • (二)PySpark3:SparkSQL编程
  • (附源码)计算机毕业设计大学生兼职系统
  • (转)iOS字体
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ****Linux下Mysql的安装和配置
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ../depcomp: line 571: exec: g++: not found
  • .form文件_SSM框架文件上传篇
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET分布式缓存Memcached从入门到实战
  • ?
  • @Not - Empty-Null-Blank
  • @Valid和@NotNull字段校验使用
  • [2016.7 day.5] T2
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [BJDCTF2020]The mystery of ip1