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

【力扣一刷】代码随想录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. 跳跃游戏】中等题 【尝试】 递归 &#xff08;超时&#xff09; 方法 贪心算法 【45.跳跃游戏II】中等题 方法 贪心算法 【122.买卖股票的最佳时机II】中等题&#xff08;偏简单&#xff0…...

安卓远离手机app

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

yolov5旋转目标检测遥感图像检测-无人机旋转目标检测(代码和原理)

YOLOv5&#xff08;You Only Look Once version 5&#xff09;是一个流行且高效的实时目标检测深度学习模型&#xff0c;最初设计用于处理图像中的水平矩形边界框目标。然而&#xff0c;对于旋转目标检测&#xff0c;通常需要对原始YOLOv5架构进行扩展或修改&#xff0c;以便能…...

云手机提供私域流量变现方案

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

树的基本概念与二叉树

文章目录 树的基本概念与二叉树一、树的概念和结构1. 树的概念2. 树的相关概念 二、树的存储1. 左孩子右兄弟表示法2. 双亲表示法 三、二叉树1. 特殊的二叉树1.1 满二叉树1.2 完全二叉树 树的基本概念与二叉树 一、树的概念和结构 1. 树的概念 树是一种非线性的数据结构,它是…...

什么是物理服务器?

物理服务器又叫做独立服务器&#xff0c;指物理上的单独服务器&#xff0c;是有着实体的服务器并不是虚拟的&#xff0c;物理服务器也可以理解成一台超大的电脑&#xff0c;但是对于普通的家用电脑来说&#xff0c;物理服务器需要长期处于开机的状态&#xff0c;对于硬件性能消…...

数据结构:详解【树和二叉树】

1. 树的概念及结构&#xff08;了解&#xff09; 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝…...

“成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用“

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

semhear环境sox

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

如何快速开启一个项目-ApiHug - API design Copilot

ApiHug101-001开启篇 &#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin |…...

从用友U9到钉钉通过接口配置打通数据

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

PyQt qrc2py 使用PowerShell将qrc文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用

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

phpstorm设置头部注释和自定义注释内容

先说设置位置&#xff1a; PhpStorm中文件、类、函数等注释的设置在&#xff1a;setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可&#xff0c;其中方法的默认是这样的&#xff1a; /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…...

【数据分析面试】10. 计算平均通勤时间(SQL:timestampdiff() 和datediff()区别)

题目 假设你在Uber工作。rides表包含了关于Uber用户在美国各地的行程信息。 编写一个查询&#xff0c;以获取纽约&#xff08;NY&#xff09;每位通勤者的平均通勤时间&#xff08;以分钟为单位&#xff09;&#xff0c;以及纽约所有通勤者的平均通勤时间&#xff08;以分钟为…...

2024年150道高频Java面试题(二十二)

43. ArrayList 和 Vector 的区别是什么&#xff1f; ArrayList 和 Vector 是 Java 中用于存储对象的两种不同类型的动态数组。它们都实现了 List 接口&#xff0c;但存在一些重要的区别&#xff1a; 同步性&#xff1a; ArrayList 是不同步的&#xff0c;意味着它不是线程安全…...

如何使用校园网——Win10笔记本,台式机互开热点

当我们使用校园网的时候&#xff0c;往往只能连接一个电脑端&#xff0c;但是又想两个机子同时连接WIFI怎么办呢&#xff1f; 当然&#xff0c;前提条件是你先得其中一台电脑有网络哈 1、打开想开共享热点的电脑的设置 A、点击WIN&#xff0c;再点击设置 2、点击网络和Inte…...

c#:简洁实现if-else语句

c#:简洁实现if-else语句 在C#中&#xff0c;可以使用三元运算符&#xff08;&#xff1f; :&#xff09;来简洁地实现if-else语句。其语法格式为&#xff1a; 条件表达式 ? 表达式1 : 表达式2 例如&#xff1a;当条件表达式为真时&#xff0c;返回表达式1的值&#xff0c;否…...

金融贷款批准预测项目

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

FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮

比如隐藏删除按钮&#xff1a; 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++】

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

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...