【力扣一刷】代码随想录day32(贪心算法part2:122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II )
目录
【122.买卖股票的最佳时机II】中等题
方法一 贪心算法
方法二 动态规划
【55. 跳跃游戏】中等题
【尝试】 递归 (超时)
方法 贪心算法
【45.跳跃游戏II】中等题
方法 贪心算法
【122.买卖股票的最佳时机II】中等题(偏简单)
方法一 贪心算法
思路:
1、局部最优:截止到当天能赚到的最大利润
2、全局最优:截止到最后一天能赚到的最大利润就是全局最大利润
例子:上升就是赚钱机会,贪心地将每个赚钱机会把握住,获取赚到的钱的总和即可
class Solution {public int maxProfit(int[] prices) {int res = 0;for (int i = 0; i < prices.length - 1; i++){int delta = prices[i + 1] - prices[i];if (delta > 0) res += delta; // 贪心算法,不放过截止到现在的所有赚钱机会}return res;}
}
- 时间复杂度: O(n),for循环遍历一次数组
- 空间复杂度: O(1),没有额外的空间开销
方法二 动态规划
思路:
1、确定dp[i]的含义:截止到第i天赚到的最多的钱
2、确定递推关系:dp[i] = dp[i-1] + today
3、确定初始值:第一天赚到的最多的钱肯定是0,即dp[0] = 0
class Solution {public int maxProfit(int[] prices) {int dp = 0;for (int i = 1; i < prices.length; i++){// 今天之前赚到的最多的钱 + 今天当天赚到最多的钱 = 包括今天在内已经赚到的最多的钱int today = prices[i] - prices[i-1] > 0 ? prices[i] - prices[i-1] : 0;dp += today;}return dp;}
}
- 时间复杂度: O(n),for循环遍历一次数组
- 空间复杂度: O(1),dp[i]只与dp[i-1]有关,只用一个变量记录值即可
【55. 跳跃游戏】中等题
【尝试】 递归 (超时)
思路:
1、确定参数和返回值:传入数组和起跳索引作为参数,返回值为起跳索引能否到达最后一个索引的判断结果。
2、确定终止条件:当起跳索引为最后一个索引时,证明能够到达最后一个下标,返回true
3、确定单层递归逻辑:先获取当前起跳索引 start 能跳到的范围,一般是 [start + 1, start + nums[start]]。只需要遍历这个范围,如果这个范围内存在能否到达最后一个索引的索引即可返回true;for遍历结束后,在这个范围内的索引都无法到达最后一个索引,则该起跳索引无法到达最后一个索引,返回false。
class Solution {public boolean canJump(int[] nums) {return canJumpToEnd(nums, 0);}public boolean canJumpToEnd(int[] nums, int start){// 起跳索引到达最后一个索引if (start == nums.length - 1) return true;// 计算起跳索引能到达的索引范围,如果索引范围超过数组的可索引范围,则取数组最大索引int longest = Math.min(start + nums[start], nums.length - 1);// for循环遍历每个start可到达的索引,如果有一个索引能到达最后一个索引就返回truefor (int i = start + 1; i <= longest; i++){if (canJumpToEnd(nums, i)) return true;}// for遍历完之后都到不了,则说明该索引无法到达最后一个索引,返回falsereturn false;}
}
方法 贪心算法
思路:
1、局部最优即获取遍历到的索引的最大覆盖范围,全局最优即遍历到最后相当于获取所有索引的最大覆盖范围,只要判断全局覆盖范围是否包含最后一个索引即可。
2、for循环遍历最大覆盖范围,每遍历一个索引就更新一次最大覆盖范围,判断最大覆盖范围是否包含了最后一个索引,是则返回true;
3、如果在最大覆盖范围内的索引都遍历完了也到达不了最后一个索引,则返回false
class Solution {public boolean canJump(int[] nums) {int longest = 0;for (int i = 0; i <= longest; i++){longest = Math.max(longest, i + nums[i]); // 更新最大覆盖范围if (longest >= nums.length - 1){ // 如果能到达最后一个索引,则返回true,还可以避免数组索引越界return true;}}return false; // 如果在最大覆盖范围内的索引都遍历完了也到达不了最后一个索引,则返回false}
}
- 时间复杂度: O(n),for循环遍历一次数组
- 空间复杂度: O(1)
【45.跳跃游戏II】中等题(偏难)
方法 贪心算法
思路:
1、贪心策略:每跳一步,就贪心地获取这一步能到达的最远处,如果最远处超过最后一个索引,则一共所跳的次数就是最少的次数。
2、关键:如何获取每跳一步能到达的最远处?
例子:[2,3,1,2,4,2,3] 结果:3
- 第①次跳,只能从 i = 0 处开始跳,所以第①次跳能到达的最远处为 i = 2,最远处还没越过最后一个索引。
- 第②次跳,如果从 i = 1 处开始跳,能到达的最远处为 i = 4;如果从 i = 2 处开始跳,能到达的最远处为 i = 3;所以综合来看,第②次跳能到达的最远处为 i = 4,最远处还没越过最后一个索引。
- 第③次跳,如果从 i = 3 处开始跳,能到达的最远处为 i = 5;如果从 i = 4 处开始跳,能到达的最远处为 i = 8;所以综合来看,第③次跳能到达的最远处为 i = 8,已经越过了最后一个索引 i = 6。
3、步骤分析:
获取当前能到达的最远处。
判断当前能到达的最远处是否能到达最后一个索引,如果计算完下一跳的边界前(或到达当前跳的边界前)就已经能到达最后一个索引,则还需要再跳一次再返回结果。
如果上一跳能跳到的位置已经遍历完了(到达上一轮的边界时),则开启新一跳,次数+1,并设置新一跳的边界。
class Solution {public int jump(int[] nums) {int longest = 0; // 用于记录已经遍历过的索引能到达的最远处int end = 0; // 用于记录上一跳的边界/能到达的最远处int cnt = 0; // 用于记录所跳的次数 for (int i = 0; i < nums.length - 1; i++){// 获取当前能到达的最远处longest = Math.max(longest, i + nums[i]);// 判断当前能到达的最远处是否能到达最后一个索引if (longest >= nums.length - 1){cnt++; // 如果计算完下一跳的边界前就已经能到达最后一个索引,则还需要再跳一次再返回结果break;}// 如果上一跳能跳到的位置已经遍历完了(到达上一轮的边界),则开启新一跳并设置新一跳的边界if (i == end){cnt++; // 开启新一跳,次数+1end = longest; // 更新新一跳能到达的最远处/边界}}return cnt;}
}
- 时间复杂度: O(n),for循环遍历一次数组
- 空间复杂度: O(1)
相关文章:

【力扣一刷】代码随想录day32(贪心算法part2:122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II )
目录 【122.买卖股票的最佳时机II】中等题 方法一 贪心算法 方法二 动态规划 【55. 跳跃游戏】中等题 【尝试】 递归 (超时) 方法 贪心算法 【45.跳跃游戏II】中等题 方法 贪心算法 【122.买卖股票的最佳时机II】中等题(偏简单࿰…...

安卓远离手机app
软件介绍 远离手机是专门为防止年轻人上瘾而打造的生活管理类的软件,适度用手机,保护眼睛,节约时间。 下载 安卓远离手机app...

yolov5旋转目标检测遥感图像检测-无人机旋转目标检测(代码和原理)
YOLOv5(You Only Look Once version 5)是一个流行且高效的实时目标检测深度学习模型,最初设计用于处理图像中的水平矩形边界框目标。然而,对于旋转目标检测,通常需要对原始YOLOv5架构进行扩展或修改,以便能…...

云手机提供私域流量变现方案
当今数字营销领域,私域流量是一座巨大的金矿,然而并非人人能够轻易挖掘。一家营销公司面临着利用社交、社区、自媒体等应用积累私域流量,并通过销售产品、推送广告等方式实现流量变现的挑战与困境。本文将详细介绍这家公司是如何通过云手机&a…...

树的基本概念与二叉树
文章目录 树的基本概念与二叉树一、树的概念和结构1. 树的概念2. 树的相关概念 二、树的存储1. 左孩子右兄弟表示法2. 双亲表示法 三、二叉树1. 特殊的二叉树1.1 满二叉树1.2 完全二叉树 树的基本概念与二叉树 一、树的概念和结构 1. 树的概念 树是一种非线性的数据结构,它是…...
什么是物理服务器?
物理服务器又叫做独立服务器,指物理上的单独服务器,是有着实体的服务器并不是虚拟的,物理服务器也可以理解成一台超大的电脑,但是对于普通的家用电脑来说,物理服务器需要长期处于开机的状态,对于硬件性能消…...

数据结构:详解【树和二叉树】
1. 树的概念及结构(了解) 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝…...

“成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用“
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用,人工智能…...

semhear环境sox
这里写自定义目录标题 pip list 看到当前环境下已经有sox了怀疑跟torchaudio和torchvision有关,更新了一下:装了torchvisionsox还是找不到 pip list 看到当前环境下已经有sox了 怀疑跟torchaudio和torchvision有关,更新了一下: p…...

如何快速开启一个项目-ApiHug - API design Copilot
ApiHug101-001开启篇 🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin |…...

从用友U9到钉钉通过接口配置打通数据
从用友U9到钉钉通过接口配置打通数据 接通系统:用友U9 用友U9cloud深耕制造领域十三载,U9cloud在机械、电子、汽配、家具、整车、军工等细分行业有着深厚的积累,尤其是机械、电子和汽配行业,不但打造了多个成熟的产品模式和应用场…...

PyQt qrc2py 使用PowerShell将qrc文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用
前言 由于需要使用不同的qt环境(PySide,PyQt)所以写了这个脚本,使用找到的随便一个rcc命令去转换qrc文件,然后将导入模块换成qtpy这个通用库(支持pyside2-6,pyqt5-6),老版本的是Qt.py(支持pysi…...

phpstorm设置头部注释和自定义注释内容
先说设置位置: PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可,其中方法的默认是这样的: /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…...

【数据分析面试】10. 计算平均通勤时间(SQL:timestampdiff() 和datediff()区别)
题目 假设你在Uber工作。rides表包含了关于Uber用户在美国各地的行程信息。 编写一个查询,以获取纽约(NY)每位通勤者的平均通勤时间(以分钟为单位),以及纽约所有通勤者的平均通勤时间(以分钟为…...
2024年150道高频Java面试题(二十二)
43. ArrayList 和 Vector 的区别是什么? ArrayList 和 Vector 是 Java 中用于存储对象的两种不同类型的动态数组。它们都实现了 List 接口,但存在一些重要的区别: 同步性: ArrayList 是不同步的,意味着它不是线程安全…...

如何使用校园网——Win10笔记本,台式机互开热点
当我们使用校园网的时候,往往只能连接一个电脑端,但是又想两个机子同时连接WIFI怎么办呢? 当然,前提条件是你先得其中一台电脑有网络哈 1、打开想开共享热点的电脑的设置 A、点击WIN,再点击设置 2、点击网络和Inte…...
c#:简洁实现if-else语句
c#:简洁实现if-else语句 在C#中,可以使用三元运算符(? :)来简洁地实现if-else语句。其语法格式为: 条件表达式 ? 表达式1 : 表达式2 例如:当条件表达式为真时,返回表达式1的值,否…...

金融贷款批准预测项目
注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 在金融服务行业,贷款审批是一项关键任务,它不仅关系到资金的安全,还直接影响到金融机构的运营效率和风险管理…...

FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮
比如隐藏删除按钮: var userTableTools BI.Constants.getConstant("dec.constant.user.table.tools")for(var key in userTableTools){if(key "delete"){var deleteItem userTableTools["delete"]deleteItem.invisible true;}}...

函数重载和引用【C++】
文章目录 函数重载什么是函数重载?函数重载的作用使用函数重载的注意点为什么C可以函数重载,C语言不行? 引用什么是引用?引用的语法引用的特点引用的使用场景引用的底层实现传参时传引用和传值的效率引用和指针的区别 函数重载 什…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...