算法训练营Day28 | leetcode 122.买卖股票的最佳时机II 55.跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II

本题首先要清楚两点:

  • 只有一只股票!
  • 当前只有买股票或者卖股票的操作

想获得利润至少要两天为一个交易单元。

贪心算法

这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入…循环反复。

如果想到其实最终利润是可以分解的,那么本题就很容易了!

如何分解呢?

假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。

此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!

那么根据 prices 可以得到每天的利润序列:(prices[i] - prices[i - 1])…(prices[1] - prices[0])。

如图:
image.png

Java

class Solution {public int maxProfit(int[] prices) {int result = 0;for (int i = 1; i < prices.length; i++) {result += Math.max(prices[i] - prices[i - 1], 0);}return result;}
}

可以看出有时候,贪心往往比动态规划更巧妙,更好用,所以别小看了贪心算法

55.跳跃游戏

思路

刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?
其实跳几步无所谓,关键在于可跳的覆盖范围!
不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。
这个范围内,别管是怎么跳的,反正一定可以跳过来。

那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!

每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。

贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点

Java

class Solution {public boolean canJump(int[] nums) {if(nums.length  == 1) return true;int cover = 0;for(int i = 0; i <= cover; i++) {cover = Math.max(cover, i + nums[i]);if(cover >= nums.length - 1) return true;}return false;}
}

1. 为什么是 i <= coverRange

i <= coverRange 的目的是限制迭代的范围,即只处理在当前「覆盖范围内」的位置。原因如下:

  • 覆盖范围的定义coverRange 是当前能到达的最远位置。
  • 迭代条件的含义:当遍历到某个位置 i 时,如果 i 已经超过了 coverRange(即 i > coverRange),说明从起点无法跳到位置 i,因此也不可能再向后推进,直接返回 false

换句话说,i <= coverRange 确保我们只在能到达的位置范围内更新最远跳跃范围。

2.i + nums[i] 的意思是计算从当前位置 i 最远可以跳到的位置。

  • i 是当前所在的位置索引。
  • nums[i] 是当前位置 i 上的数值,表示你在这个位置最多可以跳跃的步数。
  • i + nums[i] 就是从位置 i 最远可以到达的位置。

例子

假设 nums = [2, 3, 1, 1, 4],逐步分析 i + nums[i] 的作用:

  1. 第 0 步 (i = 0):
    • 当前 nums[0] = 2,所以从位置 0 最远可以跳到 0 + 2 = 2
  2. 第 1 步 (i = 1):
    • 当前 nums[1] = 3,所以从位置 1 最远可以跳到 1 + 3 = 4
  3. 第 2 步 (i = 2):
    • 当前 nums[2] = 1,所以从位置 2 最远可以跳到 2 + 1 = 3

i + nums[i] 用于动态计算当前能到达的最大范围,以便更新 coverRange(当前覆盖范围)。

45.跳跃游戏II

思路

贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。
要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数!

这里需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖

如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。

Java

class Solution {public int jump(int[] nums) {if(nums.length == 1 || nums.length == 0 || nums == null) return 0;int cur = 0; // 当前跳跃覆盖的最远位置int next = 0; // 下一次跳跃覆盖的最远位置int count = 0; // 跳跃次数for(int i = 0; i < nums.length; i++) {next = Math.max(next, i + nums[i]);if(i == cur) {if(cur != nums.length - 1) {count++;cur = next;if(cur >= nums.length - 1) break;  // 如果已经可以到达终点,提前结束}else {count++;break;}}}return count;}
}

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

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

相关文章

da白话讲深度学习-卷积网络

卷积神经网络(CNN)是指至少在网络的一层中使用卷积运算来代替一般的矩阵乘法运算的神经网络&#xff0c;因此名为为卷积神经网络&#xff08;对于神经网络的发展与类型&#xff0c;可以学习站内的相关文章&#xff09; 1.什么是卷积&#xff1f; 既然是卷积神经网络&#xff…

搭建android开发环境 android studio

1、环境介绍 在进行安卓开发时&#xff0c;需要掌握java&#xff0c;需要安卓SDK&#xff0c;需要一款编辑器&#xff0c;还需要软件的测试环境&#xff08;真机或虚拟机&#xff09;。 早起开发安卓app&#xff0c;使用的是eclipse加安卓SDK&#xff0c;需要自行搭建。 目前开…

12.30 linux 文件操作,磁盘分区挂载

ubuntu 在linux 对文件的相关操作【压缩&#xff0c;打包&#xff0c;软链接&#xff0c;文件权限】【head&#xff0c;tail&#xff0c;管道符&#xff0c;通配符&#xff0c;find&#xff0c;grep&#xff0c;cut等】脑图-CSDN博客 1.文件操作 在家目录下创建目录文件&#…

Python Celery快速入门教程

Celery 是一个简单、灵活且可靠的分布式任务队列框架&#xff0c;用于处理大量的异步任务、定时任务等。它允许你将任务发送到消息队列&#xff0c;然后由后台的工作进程&#xff08;worker&#xff09;来执行这些任务&#xff0c;并且支持多种消息中间件&#xff0c;如 Rabbit…

Unity WebGL 部署IIS

Unity WebGL 部署IIS iis添加网站WebGL配置文件WebGL Gzip模式浏览器加载速度优化iis添加网站 第一步在配置好IIS并且添加网站 WebGL配置文件 在web包Build文件夹同级创建web.config文件 web.config文件内容 <?xml version="1.0" encoding="UTF-8"?…

基于西湖大学强化学习课程的笔记

放在前面 课程链接 2024年12月30日 前言&#xff1a;强化学习有原理部分的学习&#xff0c;也有与实践相关的编程部分。我认为实践部分应该是更适合我的&#xff0c;不过原理部分也很重要&#xff0c;我目前是准备先过一过原理。 应该花多少时间学习这部分呢&#xff1f; 但是这…

CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决

环境&#xff1a; Red Hat OpenShift Container Platform (RHOCP) 4 问题&#xff1a; Cluster Version Operator 不断发送警报&#xff0c;表示在受限网络/断开连接的 OCP 4 集群中无法接收更新。 在隔离的 OpenShift 4 集群中看到 CannotRetrieveUpdates 警报&#xff1a; …

Redis--持久化策略(AOF与RDB)

持久化策略&#xff08;AOF与RDB&#xff09; 持久化Redis如何实现数据不丢失&#xff1f;RDB 快照是如何实现的呢&#xff1f;执行时机RDB原理执行快照时&#xff0c;数据能被修改吗&#xff1f; AOF持久化是怎么实现的&#xff1f;AOF原理三种写回策略AOF重写机制 RDB和AOF合…

【数据结构】链表(1):单向链表和单向循环链表

链表 链表是一种经典的数据结构&#xff0c;它通过节点的指针将数据元素有序地链接在一起&#xff0c;在链表中&#xff0c;每个节点存储数据以及指向其他节点的指针&#xff08;或引用&#xff09;。链表具有动态性和灵活性的特点&#xff0c;适用于频繁插入、删除操作的场景…

开源电子书转有声书整合包ebook2audiobookV2.0.0

ebook2audiobook&#xff1a;将电子书转换为有声书的开源项目 项目地址 GitHub - DrewThomasson/ebook2audiobook 整合包下载 更新至v2.0.0 https://pan.quark.cn/s/22956c5559d6 修改:页面已转为中文 项目简介 ebook2audiobook 是一个开源项目&#xff0c;它能够将电子…

NSSCTFpwn刷题

[SWPUCTF 2021 新生赛]nc签到 打开附件里面内容 import osart (( "####!!$$ ))#####!$$ ))(( ####!!$:(( ,####!!$: )).###!!$:##!$:#!!$!# #!$: #$#$ #!$: !!!$:\ "!$: /\ !: /"\ : /"-."-/\\\-."//.-"…

java里classpath都包含哪些范围?

什么是 classpath &#xff1f; classpath 等价于 main/java main/resources 第三方jar包的根目录 「引」SpringBoot中的classpath都包含啥

Docker+Portainer 离线安装

1. Docker安装 步骤一&#xff1a;官网下载 docker 安装包 步骤二&#xff1a;解压安装包; tar -zxvf docker-24.0.6.tgz 步骤三&#xff1a;将解压之后的docker文件移到 /usr/bin目录下; cp docker/* /usr/bin/ 步骤四&#xff1a;将docker注册成系统服务; vim /etc/sy…

#渗透测试#红蓝攻防#红队打点web服务突破口总结01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

Java:190 基于SSM的药品管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统的用户分管理员和销售两个角色的权限子模块。 管理员统计药品销售量&#xff0c;可以导出药品出入库记录&#xff0c;管理药品以及报损信息。 销…

Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读

文章信息&#xff1a; 原文链接&#xff1a;https://arxiv.org/abs/2412.18298 Abstract 视频异常检测&#xff08;VAD&#xff09;通过整合大语言模型&#xff08;LLMs&#xff09;和视觉语言模型&#xff08;VLMs&#xff09;取得了显著进展&#xff0c;解决了动态开放世界…

VUE echarts 教程二 折线堆叠图

VUE echarts 教程一 折线图 import * as echarts from echarts;var chartDom document.getElementById(main); var myChart echarts.init(chartDom); var option {title: {text: Stacked Line},tooltip: {trigger: axis},legend: {data: [Email, Union Ads, Video Ads, Dir…

001__VMware软件和ubuntu系统安装(镜像)

[ 基本难度系数 ]:★☆☆☆☆ 一、Vmware软件和Ubuntu系统说明&#xff1a; a、Vmware软件的说明&#xff1a; 官网&#xff1a; 历史版本&#xff1a; 如何下载&#xff1f; b、Ubuntu系统的说明&#xff1a; 4、linux系统的其他版本&#xff1a;红旗(redhat)、dibian、cent…

Flutter中添加全局防护水印的实现

随着版权意识的加强&#xff0c;越来越多的应用开始在应用内部增加各种各样的水印信息&#xff0c;防止核心信息泄露&#xff0c;便于朔源。 效果如下&#xff1a; 在Flutter中增加全局水印的方式&#xff0c;目前有两种实现。 方案一&#xff0c;在native层添加一个遮罩层&a…

FOC控制原理-ADC采样时机

0、文章推荐 SimpleFOC移植STM32&#xff08;五&#xff09;—— 电流采样及其变换_极对数对电流采样的影响-CSDN博客 FOC 电流采样方案对比&#xff08;单电阻/双电阻/三电阻&#xff09; - 知乎 (zhihu.com) FOC中的三种电流采样方式&#xff0c;你真的会选择吗&#xff1f;…