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

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 * 104
  • 0 <= 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 <= 104
  • 0 <= 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 <= 104
  • 0 <= 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 题目链接&#xff1a;122. 买卖股票的最佳时机 II 题目描述&#xff1a; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 …...

计蒜客详解合集(2)期

目录 T1126——单词倒排 T1617——地瓜烧 T1612——蒜头君的数字游戏 T1488——旋转单词 T1461——校验信用卡号码 T1437——最大值和次大值 T1126——单词倒排 超级水的一道题&#xff0c;和T1122类似但更简单&#xff0c;分割后逆序输出即可~ 编写程序&#xff0c;读入…...

华为防火墙vrrp+hrp双机热备主备备份(两端为交换机)

默认上下来全两个vrrp主都是左边 工作原理&#xff1a; vrrp刚开机都是先initialize状态&#xff0c;然后切成active或standb状态。 hrp使用18514端口&#xff0c;且用的单播&#xff0c;要策略放行&#xff0c;由主设备发hrp心跳报文 如果设备为acitve状态时自动优先级为65…...

Angular 由一个bug说起之一:List / Grid的性能问题

在angular中&#xff0c;MatTable构建简单&#xff0c;使用范围广。但某些时候会出现卡顿 卡顿情景&#xff1a; 1&#xff1a;一次性请求太多的数据 2&#xff1a;一次性渲染太多数据&#xff0c;这会花费CPU很多时间 3&#xff1a;行内嵌套复杂的元素 4&#xff1a;使用过多的…...

第12章 PyTorch图像分割代码框架-3:推理与部署

推理模块 模型训练完成后&#xff0c;需要单独再写一个推理模块来供用户测试或者使用&#xff0c;该模块可以命名为test.py或者inference.py&#xff0c;导入训练好的模型文件和待测试的图像&#xff0c;输出该图像的分割结果。inference.py主体部分如代码11-7所示。 代码11-7 …...

MYSQL---基础篇

一、数据库操作 1.创建数据库&#xff1a;CREATE DATABASE db_test1&#xff1b; 2.使用数据库&#xff1a;use 数据库名&#xff1b; 3.删除数据库&#xff1a;DROP DATABASE [IF EXISTS] db_name; 4.创建表&#xff1a;CREATE TABLE table_name ( field1 datatype, field2…...

【启扬方案】启扬安卓屏一体机在医疗自助服务终端上的应用解决方案

为了解决传统医疗模式下的“看病难、看病慢”等问题&#xff0c;提高医疗品质、效率与效益&#xff0c;自助服务业务的推广成为智慧医疗领域实现信息化建设、高效运作的重要环节。 医疗自助服务终端是智慧医疗应用场景中最常见的智能设备之一&#xff0c;它通过与医院信息化系统…...

收藏!7个国内「小众」的程序员社区

技术社区是大量开发者的集聚地&#xff0c;在技术社区可以了解到行业的最新进展&#xff0c;学习最前沿的技术&#xff0c;认识有相同爱好的朋友&#xff0c;在一起学习和交流。 国内知名的技术社区有CSDN、博客园、开源中国、51CTO&#xff0c;还有近两年火热的掘金&#xff…...

LeetCode(4)删除有序数组中的重复项 II【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 80. 删除有序数组中的重复项 II 1.题目 给你一个有序数组 nums &#xff0c;请你** 原地** 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数…...

C++ 同构字符串/ 单词规律

给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符上&#xff0c;相…...

oracle 中 %TYPE %ROWTYPE

前言 PL/SQL 提供了 %TYPE 和 %ROWTYPE 两种特殊的变量&#xff0c;用于声明与表的列相匹配的变量和用户定义数据类型&#xff0c;前一个表示单属性的数据类型&#xff0c;后一个表示整个属性列表的结构&#xff0c;即元组的类型。 举例&#xff1a; -- 数据表TB_TRANS_RECO…...

Pytorch实战教程(五)-计算机视觉基础

0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利用计算机算法和方法,使计算机能够模拟和理解人类的视觉系统。通过计算机视觉技术,计算机可以从图像和视频中提取有用的信息,实现对环境的感知和理解,从而帮助人们解决各种问题和提高效率。本节中,将介…...

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能&#xff1a;讲解视频&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接&#xff08;可点击&#xff09;&#xff1a; 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…...

普华永道于进博会首发“企业数据资源会计处理一体化平台”

11月6日&#xff0c;在第六届中国国际进口博览会上&#xff0c;普华永道发布企业数据资源会计处理一体化平台&#xff08;英文名为Data Accounting Platform&#xff0c;简称DAP&#xff09;。该产品以普华永道“五步法”数据资源入表路径为理论依据&#xff0c;依托多年来普华…...

IDEA 使用Reset Current Branch to Here 进行git 版本控制,图文操作

文章目录 一、总结区别&#xff08;只针对本地仓库操作&#xff09;Soft详细解释文件版本冲突处理 Mixed详细解释Hard详细解释Keep详细解释文件版本冲突处理 二、其他Revert commit 参考文档 一、总结区别&#xff08;只针对本地仓库操作&#xff09; Soft详细解释 Soft操作只…...

有趣的 TCP 抢带宽行为

昨天发了一篇 非技术文章&#xff0c;很多人找我讨论&#xff0c;浓缩成一句话&#xff0c;就是 “死道友而不死贫道”&#xff0c;我的简历上写着这些把戏能带来什么&#xff0c;我的 blog 上写着这么做是多么无耻&#xff0c;哈哈。 看看共享链路上如何挤占带宽&#xff1a; …...

HCIP---VRRP

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一. VRRP概述 VRRP---虚拟路由器冗余协议 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于在多个路由器之间创建虚拟路由器的协议。 VRRP使用了一系列协议来实现路…...

在家用Python搞副业,也能月入10000+

下班副业实现经济自由的时候&#xff0c;你还在床上躺着&#xff0c;天天摆烂吗&#xff1f;这样的生活真的是你想要的吗&#xff1f; 疫情在家接一些Python相关的小单子&#xff0c;既能给自己练手&#xff0c;还能赚是真香 从零基础开始真的一台电脑和一部手机就可以✅ 一次…...

play() failed because the user didn‘t interact with the document first.

起因&#xff1a; 进入页面视频不自动播放&#xff08;有时候可以&#xff0c;有时候不行&#xff09;。 原因&#xff1a; Chrome 在66版本后为了避免标签产生随机噪音&#xff0c;都在遵循autoplay政策。 解决方法&#xff1a; 为 video 标签设置静音状态即可&#xff08;添…...

Java任意视频转MP4

Java任意视频转MP4 在做视频上传功能时候&#xff0c;用户可能上传不同类型的视频文件&#xff0c;导致需要特定播放器才能播放&#xff0c;为了解决视频格式统一问题需要把视频转码一下 &#xff0c;转换成统一的MP4格式。我们直接使用第三方工具 FFmpeg FFmpeg介绍 FFmpeg…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

华为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 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...