力扣每日一题:2008. 出租车的最大盈利(2023-12-08)

力扣每日一题

题目:2008. 出租车的最大盈利

2023-12-08.png

简短说明

今天的解题有点曲折,完全是一步一步优化来的,看上面的截图,最开始的超时,超时后我加了记忆化搜索,虽然通过了,但是执行时间不太理想,接下来我稍微优化了下,但是执行时间基本没动过,接下来,又尝试着去掉递归,这次效果很显著,执行时间直接从2000多毫秒降低到了18毫秒

过程

下面我分别把这四次的代码都展示出来,记录下每次的优化,代码展示顺序是按照上面的截图从下往上的

超出时间限制

class Solution {public long maxTaxiEarnings(int n, int[][] rides) {List<int[]>[] prices = new ArrayList[n+1];for(int[] ride:rides){if(prices[ride[1]]==null){prices[ride[1]] = new ArrayList<>();}prices[ride[1]].add(new int[]{ride[0],ride[1]-ride[0]+ride[2]});}return dfs(n,prices);}long dfs(int index,List<int[]>[] prices){if(index==1){return 0;}long res = dfs(index-1,prices);if(prices[index]!=null){for(int[] price:prices[index]){res = Math.max(res,dfs(price[0],prices)+price[1]);}}return res;}
}

2219ms + 84.8MB

class Solution {public long maxTaxiEarnings(int n, int[][] rides) {List<int[]>[] prices = new ArrayList[n+1];for(int[] ride:rides){if(prices[ride[1]]==null){prices[ride[1]] = new ArrayList<>();}prices[ride[1]].add(new int[]{ride[0],ride[1]-ride[0]+ride[2]});}max = new long[n+1];return dfs(n,prices);} long[] max;long dfs(int index,List<int[]>[] prices){if(index==1){return 0;}long res = dfs(index-1,prices);if(prices[index]!=null){for(int[] price:prices[index]){if(max[price[0]]>0){res = Math.max(res,max[price[0]]+price[1]);}else{res = Math.max(res,dfs(price[0],prices)+price[1]);}}}max[index] = res;return res;}
}

2306ms + 84.2MB

class Solution {public long maxTaxiEarnings(int n, int[][] rides) {List<int[]>[] prices = new ArrayList[n+1];for(int[] ride:rides){if(prices[ride[1]]==null){prices[ride[1]] = new ArrayList<>();}prices[ride[1]].add(new int[]{ride[0],ride[1]-ride[0]+ride[2]});}max = new long[n+1];return dfs(n,prices);} long[] max;long dfs(int index,List<int[]>[] prices){if(index==1){return 0;}if(max[index]>0){return max[index];}long res = dfs(index-1,prices);if(prices[index]!=null){for(int[] price:prices[index]){res = Math.max(res,dfs(price[0],prices)+price[1]);}}max[index] = res;return res;}
}

18ms + 67.3MB

class Solution {public long maxTaxiEarnings(int n, int[][] rides) {List<int[]>[] prices = new ArrayList[n+1];for(int[] ride:rides){if(prices[ride[1]]==null){prices[ride[1]] = new ArrayList<>();}prices[ride[1]].add(new int[]{ride[0],ride[1]-ride[0]+ride[2]});}long[] max = new long[n+1];for(int i=2;i<=n;i++){max[i] = max[i-1];if(prices[i]!=null){for(int[] price:prices[i]){max[i] = Math.max(max[i],max[price[0]]+price[1]);}}}return max[n];}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 快速实现拖拽改变容器宽高度

一、前言 有时我们需要对一个容器的宽高度进行动态的修改&#xff0c; 最简单直接的方法一般为&#xff1a;用户可以拖拽容器的边缘来改变其大小&#xff0c;例如下面这样的效果&#xff1a; 在react中&#xff0c;我们可以使用re-resizable这个三方库来快速的实现上面的效果…

剧本杀小程序搭建:打造线上剧本杀新体验

剧本杀是一款以角色扮演为主的游戏&#xff0c;一度成为了年轻人的最喜爱的社交游戏。在剧本杀市场需求下&#xff0c;剧本杀规模也迅速上升。今年第一季度&#xff0c;剧本杀市场规模环比增长47%&#xff0c;市场整体消费水平逐渐呈上升趋势。 随着剧本杀的不断发展&#xff…

C程序设计—输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。

#include <stdio.h> #include <ctype.h> // 包含ctype.h头文件&#xff0c;用于判断字符类型 int main() { char str[100]; // 定义字符数组&#xff0c;用于存储输入的字符串 int i, letters 0, space 0, digit 0, others 0; // 定义变量&#xff0c…

Navicat 技术指引 | 适用于 GaussDB 分布式的自动运行功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

ambari hive on Tez引擎一直卡住

hive on tez使用./bin/hive启动后一直卡住&#xff0c;无法进入命令行 使用TEZ作为Hive默认执行引擎时&#xff0c;需要在调用Hive CLI的时候启动YARN应用&#xff0c;预分配资源&#xff0c;这需要花一些时间&#xff0c;而使用MapReduce作为执行引擎时是在执行语句的时候才会…

条码生成器与Zint使用

文章目录 目的条形码zint支持条形码种类下载编译qt pro配置code保存条形码目的 1: 了解条形码数据理论知识 2: 了解zint第三方库相关, 如何编译引用到项目中 条形码 条形码(Barcode)一维码 和二维码(QR code)都是用于存储信息的图形化表示方式,通常应用于商品标识、库…

【视觉SLAM十四讲学习笔记】第四讲——李群与李代数基础

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

谷歌宣布为Pixel 8 Pro加入Gemini Nano支持;Claude 2.1 的长篇幅提示技巧

&#x1f989; AI新闻 &#x1f680; 谷歌宣布为Pixel 8 Pro加入Gemini Nano支持 摘要&#xff1a;谷歌将为Pixel 8 Pro机型加入对Gemini Nano的支持。Gemini Nano是专为小型设备而构建的模型版本&#xff0c;可在本月的更新中正式登场。该机的录音App将支持要点总结功能&…

【改进YOLOv8】融合Gold-YOLO的车辆未礼让行人检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着交通工具的普及和道路交通量的增加&#xff0c;交通安全问题日益凸显。尤其是车辆未礼让行人的情况频繁发生&#xff0c;给行人的生命安全带来了严重威胁。因…

Docker构建自定义镜像

创建一个docker-demo的文件夹,放入需要构建的文件 主要是配置Dockerfile文件 第一种配置方法 # 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量&#xff0c;JDK的安装目录 ENV JAVA_DIR/usr/local# 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo…

学会用bash在linux写脚本 (一)

本章主要介绍如何使用bash写脚本。 了解通配符 了解变量 了解返回值和数值运算 grep的用法是“grep 关键字 file”&#xff0c;意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/messages 中过滤出含有root …

diffusers pipeline拆解:理解pipelines、models和schedulers

diffusers pipeline拆解&#xff1a;理解pipelines、models和schedulers 翻译自&#xff1a;https://huggingface.co/docs/diffusers/using-diffusers/write_own_pipeline v0.24.0 diffusers 设计初衷就是作为一个简单且易用的工具包&#xff0c;来帮助你在自己的使用场景中构建…