代码随想录 -- day32 -- 122.买卖股票的最佳时机II 、55. 跳跃游戏、 45.跳跃游戏II

【代码随想录训练营】【Day32】第八章|贪心算法|122.买卖股票的最佳时机II |55. 跳跃游戏|45.跳跃游戏II 阅读详情

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

思路:

因为我们其实是算他获取的利润,既然是利润,我们就算正利润就可以。

局部贪心:收集每天的正利润

全局贪心:算出最大利润 

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result = 0;
        for (int i = 1; i < prices.size(); i++) {
            result += max(prices[i] - prices[i - 1], 0);
        }
        return result;
    }
};

55. 跳跃游戏

思路:

示例1中从2开始,也就是我们可以跳1步也可以两步,这就是我们跳跃的覆盖范围。所以我们可以考虑最后的跳跃范围是否可以覆盖到终点。 每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。

局部最优解:每次取最大跳跃步数(取最大覆盖范围)

整体最优解:最后得到整体最大覆盖范围,看是否能到终点。

i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。

而 cover 每次只取 max(该元素数值补充后的范围, cover 本身范围)。

如果 cover 大于等于了终点下标,直接 return true 就可以了。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover = 0;
        if (nums.size() == 1) return true; // 只有一个元素,就是能达到
        for (int i = 0; i <= cover; i++) { // 注意这里是小于等于cover
            cover = max(i + nums[i], cover);
            if (cover >= nums.size() - 1) return true; // 说明可以覆盖到终点了
        }
        return false;
    }
};

 45.跳跃游戏II

思路:

局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。

整体最优:一步尽可能多走,从而达到最小步数。

所以真正解题的时候,要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数!

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

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

  • 如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
  • 如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了。
class Solution {
public:
    int jump(vector<int>& nums) {
        if (nums.size() == 1) return 0;
        int curDistance = 0;    // 当前覆盖最远距离下标
        int ans = 0;            // 记录走的最大步数
        int nextDistance = 0;   // 下一步覆盖最远距离下标
        for (int i = 0; i < nums.size(); i++) {
            nextDistance = max(nums[i] + i, nextDistance);  // 更新下一步覆盖最远距离下标
            if (i == curDistance) {                         // 遇到当前覆盖最远距离下标
                ans++;                                  // 需要走下一步
                curDistance = nextDistance;             // 更新当前覆盖最远距离下标(相当于加油了)
                if (nextDistance >= nums.size() - 1) break;  // 当前覆盖最远距到达集合终点,不用做ans++操作了,直接结束
            }
        }
        return ans;
    }
};

Conda虚拟环境用conda和pip安装软件包的路径问题 解决在虚拟环境中用pip默认把软件包安装到全局site-packages中。 阅读详情

相关推荐

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1567

代码随想录day32|122.买卖股票的最佳时机II|55. 跳跃游戏|45.跳跃游戏II|复习day3|Golang

笔记

weixin_42161901的博客 1359

告别手动发日报!用n8n+钉钉打造智能报告机器人(含模板下载)

本文详细介绍了如何利用n8n开源工作流自动化平台与钉钉机器人搭建智能日报系统,实现数据自动采集、处理和发送。通过实战步骤和模板下载,帮助用户告别手动处理日报的繁琐,提升工作效率和数据准确性。

h3i4j的博客 856

【代码随想录算法训练营Day32】122.买卖股票的最佳时机II;55.跳跃游戏;45.跳跃游戏II

如果移动下标等于当前覆盖最大距离下标, 需要再走一步(即 ans++),因为最后一步一定是可以到的终点。从图中可以发现,其实我们需要收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间。针对于方法一的特殊情况,可以统一处理,即:移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不考虑是不是终点的情况。从图中可以看出来,就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。总结:每次只走一步,求当前数可以覆盖到的范围,取最大的范围。

Tammy2001的博客 1045

YOLOv8 轴承缺陷检测 使用YOLOv8进行训练、评估和可视化预测结果 包含1440张图片的轴承缺陷检测数据集 YOLO格式或XML格式

本文介绍了一个基于YOLOv8的轴承缺陷检测项目。数据集包含1440张图片,标注了4类缺陷(凹槽、凹陷、卡伤、划痕),按8:1:1比例划分为训练集(1152张)、验证集(144张)和测试集(144张)。标注文件支持YOLO格式和XML格式,可直接用于模型训练。项目实现了数据准备、模型训练、评估及可视化预测结果的全流程,使用YOLOv8n预训练模型进行50个epoch的训练,并提供了数据格式转换(XML转YOLO)的代码示例。最终模型可自动检测轴承表面缺陷,并保存预测结果。

OICQQ67658008的博客 1439

SPL06气压温度传感器SPI驱动与补偿算法详解

气压传感器与温度传感器是嵌入式环境感知系统的核心组件,其测量精度高度依赖于MEMS芯片的校准参数与非线性补偿机制。SPL06作为集成式高精度数字传感器,采用24位Σ-Δ ADC与片内补偿引擎,需结合唯一出厂校准系数(即‘芯片指纹’)进行多阶数学修正,才能将原始ADC值转化为符合计量要求的帕斯卡(Pa)与摄氏度(℃)物理量。该过程涵盖SPI通信协议解析、寄存器时序控制、大端数据拼接、二进制补码处理及浮点/定点混合运算等典型嵌入式工程实践。广泛应用于无人机高度计、智能穿戴海拔监测与IoT气象终端中。

weixin_34640289的博客 143

代码随想录Day32|122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II

122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II

weixin_46620779的博客 1231

从OAuth到DID:Web4.0身份验证协议的技术演进图谱

在数字身份体系从Web2.0向Web4.0跨越的进程中,身份验证协议正经历着从中心化授权到自主主权的范式转移。本文通过对比OAuth 2.0、OpenID Connect等传统方案与W3C DID、ION等去中心化协议的技术架构,揭示身份验证技术在性能、安全、隐私三大维度的代际差异。基于对GitHub、欧盟数字身份钱包等典型系统的实测数据分析,量化评估中心化授权服务器的单点故障风险与DID链上验证的吞吐量瓶颈。结合零知识证明、分布式密钥管理等前沿技术,为开发者提供面向Web4.0的渐进式身份架构迁移策略。

水务人 834

零基础代码随想录【Day32】|| 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II

局部最优推出全局最优,找不出反例,试试贪心!

Andrew______的博客 1220

UniApp实战:从文件下载到本地保存与预览的一站式解决方案

本文深入解析了UniApp开发中文件下载、保存与预览的完整流程,提供了基于uni.downloadFile、uni.saveFile和uni.openDocument API的一站式实战解决方案。文章详细拆解了核心API的使用方法、多平台(App、H5)的兼容性处理、常见坑点(如文件路径、权限、格式支持)以及进阶优化技巧(如进度提示、文件管理),旨在帮助开发者构建健壮、用户体验良好的跨平台文件处理功能。

d3e4f的博客 614

【电子通识】TINA-TI怎么使用受控源向导创建受控源

TINA-TI怎么使用受控源向导创建受控源

一点硬件 357

代码随想录刷题day32 122.买卖股票的最佳时机II;55. 跳跃游戏;45.跳跃游戏II

代码随想录刷题day32

weixin_43127049的博客 885

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 236

代码随想录Day32 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

Day32

sRiddle的博客 524

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【代码随想录算法训练Day32】122.买卖股票的最佳时机 55.跳跃游戏 45.跳跃游戏II

这里贪的是走到已知的最远距离,不是该格子能到的最远距离。这题简单说就是一开始我们知道能走一段距离,我们在已知的能走到的区域中,每走一步能知道当前点能到的距离,我们要做的是寻找还能走到的最远的距离,然后更新我们已知的最远距离,再在这个距离里找下一个能跳到的最远的距离。关于步数的计算,每次寻找完后可以看作是直接走到了已知的最远,知道了新的能到的最远,可以直接到达新的最远,这里步数+1,然后在新到达的最远的距离的格子又得知了一段新的最远,接着再在这段新的已知距离中找下一个最远再直接跳。45.跳跃游戏 II。

xl1052524603的博客 744

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

代码随想录算法训练营Day32 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II | Python | 个人记录向

贪心算法:122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II。

Python基本算法 1438

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

代码随想录算法训练营day 32 || 122.买卖股票的最佳时机 II,55. 跳跃游戏,45.跳跃游戏 II

上的思想其实是一致的,Carl哥是更新最大范围,而是在当前位置开始寻找最远可到达的位置,然后findmax返回就是到达最远位置是哪个点,这个点就是我的下一跳位置;如果最远范围已经到达末尾了,那么可以直接返回,但是需要注意的就是最远的范围是没有到达的,只是我在当前i位置的num[i]范围中某个位置j可以跳到的最远位置j+nums[j],跳到j这个位置我们记录了,但是最大范围是需要j再跳一步的,所以需要额外的再count+1,然后return。(方法还是比较绕的,希望我的讲解可以使您明白)

旭 568

代码随想录算法训练营Day32|122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

本题要求只能持有一支股票,根据每日股票的价格控制股票的买入和卖出获取最大利润。本题可以继承上一题求最大覆盖范围的思路,但是在具体处理上还要复杂一些。贪心算法的题目确实思路比较难想,有点费脑子。

m0_68682181的博客 732

代码随想录算法训练营DAY32|C++贪心算法Part.2|122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II

从上文可以看出,我们要比较当前范围下能扩充的最终范围。

糖炒栗子 1431

代码随想录训练营Day32|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122. 买卖股票的最佳时机 II - 力扣(LeetCode)45. 跳跃游戏 II - 力扣(LeetCode)55. 跳跃游戏 - 力扣(LeetCode)122.买卖股票的最佳时机II。122.买卖股票的最佳时机II。

weixin_44174445的博客 339

代码随想录刷题Day32 | 122.买卖股票的最佳时机II | 55. 跳跃游戏 | 45. 跳跃游戏 II

代码随想录刷题Day32 | 122.买卖股票的最佳时机II | 55. 跳跃游戏 | 45. 跳跃游戏 II

DUM1615的博客 954

代码随想录二刷 day32 | 贪心之 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

贪心之 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

baimaozi_007的博客 214

代码随想录Day 32 || 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

具体来说,我们可以遍历整个数组,并在所有可到达的位置中更新最远可到达的位置。如果最远可到达的位置大于等于数组的最后一个位置,那么就意味着我们可以到达数组的最后一个位置。具体来说,我们可以遍历价格数组,对于数组中的每一个价格,都和前一天的价格进行比较。我们这样做是因为到达更远的位置可能会为后续的跳跃提供更好的选择,从而减少总的跳跃次数。当我们到达当前的跳跃边界时,我们知道需要进行另一个跳跃,并更新跳跃边界为可以达到的最远位置。我们的目标是以最少的跳跃次数从数组的开始位置(下标0)跳到最后位置(下标4)。

m0_66462858的博客 181

代码随想录算法训练营 day32 |122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。如果移动下标达到了当前这一步的最大覆盖最远距离了,还没有到终点的话,那么就必须再走一步来增加覆盖范围,直到覆盖范围覆盖了终点。从图中可以看出来,就是移动下标达到了当前覆盖的最远距离下标时,步数就要加一,来增加覆盖距离。,即:移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不考虑是不是终点的情况。这里还是有个特殊情况需要考虑,当移动下标达到了当前覆盖的最远距离下标时。

weixin_42179093的博客 232

代码随想录【Day32】| 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

贪心

傅里叶变不出的博客 142

【代码随想录算法训练Day32】LeetCode 122 买卖股票的最佳时机 II、LeetCode 55.跳跃游戏、LeetCode 45.跳跃游戏II

贪心第二天

qq_46121420的博客 516
上一篇: 代码随想录 -- day31 -- 455.分发饼干 、376. 摆动序列 、53. 最大子序和
下一篇: 代码随想录 -- day34 -- 1005.K次取反后最大化的数组和、134. 加油站 、135. 分发糖果
七人酒
博客等级 码龄4年 51粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值