LeetCode算法题解(贪心)|LeetCode122. 买卖股票的最佳时机 II、LeetCoed55. 跳跃游戏、LeetCode45. 跳跃游戏 II
一、LeetCode122. 买卖股票的最佳时机 II
题目链接:122. 买卖股票的最佳时机 II
题目描述:
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
示例 1:
输入:prices = [7,1,5,3,6,4] 输出:7 解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。总利润为 4 + 3 = 7 。
示例 2:
输入:prices = [1,2,3,4,5] 输出:4 解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。总利润为 4 。
示例 3:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0 。
提示:
1 <= prices.length <= 3 * 1040 <= prices[i] <= 104
算法分析:
利用贪心。
局部最优:下一天的股票价格高于当天的股票价格,当天买入股票,下一天出售股票就可以获得两天股票价格差的利润。
全局最优:所有利润加起来就是能够获得的最大利润。
代码如下:
class Solution {public int maxProfit(int[] prices) {int sum = 0;//利润for(int i = 0; i < prices.length - 1; i++) {//只要下一天的股票价格高于当天的股票价格,那么就可以在当天买入股票,下一天出售股票,获得下一天股票价格减去当天股票价格的利润。if(prices[i + 1] > prices[i]) sum += prices[i + 1] - prices[i];}return sum;}
}
二、LeetCoed55. 跳跃游戏
题目链接:55. 跳跃游戏
题目描述:
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
示例 1:
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
示例 2:
输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
提示:
1 <= nums.length <= 1040 <= nums[i] <= 105
算法分析:
局部最优:遍历每一步所能够走到的地方,同时更新下一步能够走到的最大范围。
全局最优:如果下一步能够走到的最大范围超过了数组最后一个元素的下标,说明是可以走到这个地方的。
代码如下:
class Solution {public boolean canJump(int[] nums) {int index = nums[0];//记录第一步能走到的最大范围for(int i = 0; i <= index; i++) {//遍历能走到的地方if(index >= nums.length - 1) return true;//如果最大范围大于等于最后一个元素的下标,说明可以跳到最后一个元素,返回true//在第i个位置时所能跳到的最大范围是i+nums[i],更新一下下一步能够走到的最大范围。index = index > i + nums[i] ? index : i + nums[i];}return false;}
}
三、LeetCode45. 跳跃游戏 II
题目链接:45. 跳跃游戏 II
题目描述:
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
0 <= j <= nums[i]i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
示例 1:
输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳 3步到达数组的最后一个位置。
示例 2:
输入: nums = [2,3,0,1,4] 输出: 2
提示:
1 <= nums.length <= 1040 <= nums[i] <= 1000- 题目保证可以到达
nums[n-1]
算法分析:
用三个变量分别记录当前这一步的起始下标,步数和下一步所能到达的最大范围。
局部最优:每次走能跨最大范围的那一步。遍历当前这一步所能走到的位置,跟新下一步的起始位置和最大范围,跟新步数。
全局最优:下一步的最大范围超过数组最后一个元素下标时,说明只需再走一步就可以到达了。
代码如下:
class Solution {public int jump(int[] nums) {if(nums.length == 1) return 0;int index = nums[0];//下一步所能走到的最大范围int steps = 0;//步数int start = 0;//每一步的起始下标while(index < nums.length - 1) {//如果下一步走到的最大范围大于等于数组的最后一个元素下标,直接一步走完int maxindex = index;//记录当前这一步所能到达的最大位置for(int i = start; i <= maxindex; i++) {//遍历当前这一步所能到达的位置if(i + nums[i] > index) {//更新下一步所能走到的最大位置,同时标记下一步的起始下标index = nums[i] + i;start = i;}}steps++;//跟新当前步数}steps++;//走最后一步才能到达return steps;}
}
总结
贪心算法,
难点是如何找到局部最优,然后如何推到全局最优。
相关文章:
LeetCode算法题解(贪心)|LeetCode122. 买卖股票的最佳时机 II、LeetCoed55. 跳跃游戏、LeetCode45. 跳跃游戏 II
一、LeetCode122. 买卖股票的最佳时机 II 题目链接:122. 买卖股票的最佳时机 II 题目描述: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 …...
计蒜客详解合集(2)期
目录 T1126——单词倒排 T1617——地瓜烧 T1612——蒜头君的数字游戏 T1488——旋转单词 T1461——校验信用卡号码 T1437——最大值和次大值 T1126——单词倒排 超级水的一道题,和T1122类似但更简单,分割后逆序输出即可~ 编写程序,读入…...
华为防火墙vrrp+hrp双机热备主备备份(两端为交换机)
默认上下来全两个vrrp主都是左边 工作原理: vrrp刚开机都是先initialize状态,然后切成active或standb状态。 hrp使用18514端口,且用的单播,要策略放行,由主设备发hrp心跳报文 如果设备为acitve状态时自动优先级为65…...
Angular 由一个bug说起之一:List / Grid的性能问题
在angular中,MatTable构建简单,使用范围广。但某些时候会出现卡顿 卡顿情景: 1:一次性请求太多的数据 2:一次性渲染太多数据,这会花费CPU很多时间 3:行内嵌套复杂的元素 4:使用过多的…...
第12章 PyTorch图像分割代码框架-3:推理与部署
推理模块 模型训练完成后,需要单独再写一个推理模块来供用户测试或者使用,该模块可以命名为test.py或者inference.py,导入训练好的模型文件和待测试的图像,输出该图像的分割结果。inference.py主体部分如代码11-7所示。 代码11-7 …...
MYSQL---基础篇
一、数据库操作 1.创建数据库:CREATE DATABASE db_test1; 2.使用数据库:use 数据库名; 3.删除数据库:DROP DATABASE [IF EXISTS] db_name; 4.创建表:CREATE TABLE table_name ( field1 datatype, field2…...
【启扬方案】启扬安卓屏一体机在医疗自助服务终端上的应用解决方案
为了解决传统医疗模式下的“看病难、看病慢”等问题,提高医疗品质、效率与效益,自助服务业务的推广成为智慧医疗领域实现信息化建设、高效运作的重要环节。 医疗自助服务终端是智慧医疗应用场景中最常见的智能设备之一,它通过与医院信息化系统…...
收藏!7个国内「小众」的程序员社区
技术社区是大量开发者的集聚地,在技术社区可以了解到行业的最新进展,学习最前沿的技术,认识有相同爱好的朋友,在一起学习和交流。 国内知名的技术社区有CSDN、博客园、开源中国、51CTO,还有近两年火热的掘金ÿ…...
LeetCode(4)删除有序数组中的重复项 II【数组/字符串】【中等】
目录 1.题目2.答案3.提交结果截图 链接: 80. 删除有序数组中的重复项 II 1.题目 给你一个有序数组 nums ,请你** 原地** 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数…...
C++ 同构字符串/ 单词规律
给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相…...
oracle 中 %TYPE %ROWTYPE
前言 PL/SQL 提供了 %TYPE 和 %ROWTYPE 两种特殊的变量,用于声明与表的列相匹配的变量和用户定义数据类型,前一个表示单属性的数据类型,后一个表示整个属性列表的结构,即元组的类型。 举例: -- 数据表TB_TRANS_RECO…...
Pytorch实战教程(五)-计算机视觉基础
0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利用计算机算法和方法,使计算机能够模拟和理解人类的视觉系统。通过计算机视觉技术,计算机可以从图像和视频中提取有用的信息,实现对环境的感知和理解,从而帮助人们解决各种问题和提高效率。本节中,将介…...
51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)
PCF8591数字电压表数码管显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…...
普华永道于进博会首发“企业数据资源会计处理一体化平台”
11月6日,在第六届中国国际进口博览会上,普华永道发布企业数据资源会计处理一体化平台(英文名为Data Accounting Platform,简称DAP)。该产品以普华永道“五步法”数据资源入表路径为理论依据,依托多年来普华…...
IDEA 使用Reset Current Branch to Here 进行git 版本控制,图文操作
文章目录 一、总结区别(只针对本地仓库操作)Soft详细解释文件版本冲突处理 Mixed详细解释Hard详细解释Keep详细解释文件版本冲突处理 二、其他Revert commit 参考文档 一、总结区别(只针对本地仓库操作) Soft详细解释 Soft操作只…...
有趣的 TCP 抢带宽行为
昨天发了一篇 非技术文章,很多人找我讨论,浓缩成一句话,就是 “死道友而不死贫道”,我的简历上写着这些把戏能带来什么,我的 blog 上写着这么做是多么无耻,哈哈。 看看共享链路上如何挤占带宽: …...
HCIP---VRRP
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一. VRRP概述 VRRP---虚拟路由器冗余协议 VRRP(Virtual Router Redundancy Protocol)是一种用于在多个路由器之间创建虚拟路由器的协议。 VRRP使用了一系列协议来实现路…...
在家用Python搞副业,也能月入10000+
下班副业实现经济自由的时候,你还在床上躺着,天天摆烂吗?这样的生活真的是你想要的吗? 疫情在家接一些Python相关的小单子,既能给自己练手,还能赚是真香 从零基础开始真的一台电脑和一部手机就可以✅ 一次…...
play() failed because the user didn‘t interact with the document first.
起因: 进入页面视频不自动播放(有时候可以,有时候不行)。 原因: Chrome 在66版本后为了避免标签产生随机噪音,都在遵循autoplay政策。 解决方法: 为 video 标签设置静音状态即可(添…...
Java任意视频转MP4
Java任意视频转MP4 在做视频上传功能时候,用户可能上传不同类型的视频文件,导致需要特定播放器才能播放,为了解决视频格式统一问题需要把视频转码一下 ,转换成统一的MP4格式。我们直接使用第三方工具 FFmpeg FFmpeg介绍 FFmpeg…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
