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

news2025/1/15 20:50:53

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

题目要求:给定一个数组,它的第  i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

  • 输入: [7,1,5,3,6,4]
  • 输出: 7
  • 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例 2:

  • 输入: [1,2,3,4,5]
  • 输出: 4
  • 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例  3:

  • 输入: [7,6,4,3,1]
  • 输出: 0
  • 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

提示:

  • 1 <= prices.length <= 3 * 10 ^ 4
  • 0 <= prices[i] <= 10 ^ 4

思路

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

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

最终利润是可以分解的,那么本题就很容易了!

如何分解呢?

假如第 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])。

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

55. 跳跃游戏

题目要求:给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例  1:

  • 输入: [2,3,1,1,4]
  • 输出: true
  • 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

示例  2:

  • 输入: [3,2,1,0,4]
  • 输出: false
  • 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

思路

不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。

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

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

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

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cov = 0;
        if (nums.size() == 1) return true;
        // 注意这里是小于等于cover,因为只能走到cov覆盖到的位置
        for (int i = 0; i <= cov; ++i) {
            cov = max(cov, nums[i] + i);
            if (cov >= nums.size() - 1) return true;
        }
        return false;
    }
};

45. 跳跃游戏 II

题目要求:给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

  • 输入: [2,3,1,1,4]
  • 输出: 2
  • 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳  1  步,然后跳  3  步到达数组的最后一个位置。

说明: 假设你总是可以到达数组的最后一个位置。

思路

本题要计算最少步数,那么就要想清楚什么时候步数才一定要加一呢?

贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。

思路虽然是这样,但在写代码的时候还不能真的能跳多远就跳多远,那样就不知道下一步最远能跳到哪里了。

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

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

class Solution {
public:
    int jump(vector<int>& nums) {
        int curDistance = 0;
        int ans = 0;
        int nextDistance = 0;
        for (int i = 0; i < nums.size() - 1; ++i) {
            nextDistance = max(nums[i] + i, nextDistance);
            if (i == curDistance) {
                curDistance = nextDistance;
                ans++;
            }
        }
        return ans;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot实现漫画网站管理系统项目【项目源码+论文说明】计算机毕业设计

基于Springboot实现漫画网站管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括…

Docker从入门到实战

Docker基本概念 1、解决的问题 1、统一标准 应用构建 ○ Java、C、JavaScript ○ 打成软件包 ○ .exe ○ docker build … 镜像应用分享 ○ 所有软件的镜像放到一个指定地方 docker hub ○ 安卓&#xff0c;应用市场应用运行 ○ 统一标准的 镜像 ○ docker run 容器化技术 …

Snowflake雪花算法

文章目录 分布式ID一、雪花算法起源二、雪花算法的原理三、java实现雪花算法四、常见问题总结 分布式ID 分布式ID&#xff0c;也称为全局唯一ID&#xff0c;是在分布式系统中用于标识数据的唯一标识符。随着业务量的不断扩展&#xff0c;传统的UUID和数据库自增ID无法满足需求…

Linux下的IMX6ULL——IMX6ULL Pro开发板基本操作(二)

目录&#xff1a; 前面我们已经配置好了环境&#xff0c;下载好了软件&#xff0c;下面让我们对我们使用的开发板有给简单的了解吧&#xff0c;IMX6ULL Pro开发板基本操作是必不可少的一大环节&#xff0c;下面让我们从它的硬件资源&#xff0c;软件资源等一系列开发板的基础操…

医院多维度综合绩效考核系统源码 商业项目源码,支持二次开发

医院多维度综合绩效考核系统源码 商业项目源码&#xff0c;支持二次开发 采用多维度综合绩效考核的形式&#xff0c;针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求&#xff0c;对考核方案中各维度进行灵活配置&#xff0c;对各维…

Kubernetes-进阶(Pod生命周期/调度/控制器,Ingress代理,数据存储PV/PVC)

Kubernetes-进阶 Pod详解 每个Pod中都可以包含一个或多个容器&#xff0c;这些容器可以分两类 用户程序所在容器&#xff0c;数量用户决定Pause容器&#xff0c;这是每个Pod都会有的一个根容器&#xff0c;它的作用有两个 可以以它为依据&#xff0c;评估整个Pod的健康状态可以…

打印机提示“需要用户干预”解决方法

在计算机管理中&#xff0c;点击“服务和应用程序”中的“服务”&#xff1b; 3、在右侧找到“Print Spooler”服务&#xff0c;点击停止此服务&#xff08;不要退出此页面&#xff0c;后面会用&#xff0c;最小化即可&#xff09;&#xff1b; 4、按WINR&#xff0c;输入“spo…

海信商用显示出海提速,在参与共建“一带一路”中成长

2023年是中国“一带一路”倡议提出十周年。十年来&#xff0c;“一带一路”建设取得了实打实、沉甸甸的重大历史性成就&#xff0c;成为深受欢迎的国际公共产品和国际合作平台。丰硕成果的背后&#xff0c;离不开广大企业的积极参与与担当作为。作为较早出海的中国品牌之一&…

发现一款好用的数据库安全风险扫描工具-DPEasy,推荐给大家!

数据库安全治理是确保企业数据安全的关键任务&#xff0c;然而&#xff0c;许多企业在实际操作中面临着多种挑战。通过深入沟通交流和实地分析&#xff0c;我们发现企业在数据库安全治理过程中主要受到以下问题困扰&#xff1a;外部人员风险、账号权限管理困难、内部业务复杂以…

安美数字酒店宽带运营系统SQL注入漏洞复现 [附POC]

文章目录 安美数字酒店宽带运营系统SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 安美数字酒店宽带运营系统SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非…

教你看懂Web 3.0:未来的互联网

众所周知&#xff0c;互联网已经成为我们日常生活的一部分&#xff0c;我们用它来搜索信息、社交、购物&#xff0c;甚至观看视频和听音乐。但你是否曾经想过&#xff0c;未来的互联网会是什么样子&#xff1f;让我们来谈谈Web 3.0&#xff0c;它是互联网的下一个大版本&#x…

BUGKU - 渗透测试1

场景1 源代码 场景2 admin 进入后台 账号密码admin admin 场景3 这里确实没想到。。。。 去php执行的地方 然后打开开发者工具进行抓包 发现执行后是存入php文件 我们写入一句话即可 这里我上传哥斯拉链接即可 场景4 根据提示 去找到数据库链接功能 场景5 PWN题目。…

k8s安装可视化界面

执行以下命令&#xff08;需要翻墙&#xff09;&#xff1a; kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml 或者用我文章提供的文件&#xff0c;执行 kubectl apply -f dashboard.xml 添加可访问地址 此时可…

融云AIGC专题:高知识密度与大数据处理双向奔赴的「金融大模型」

融云出海方案全线升级 点击上方小程序报名「爱嗨游」线上发布会 “怎么用大语言模型去提升生产效率和服务表现&#xff1f;”在时代交替之际&#xff0c;这是每个行业都要回答的问题。关注【融云 RongCloud】&#xff0c;了解协同办公平台更多干货。 而新技术的渗透不会在所有…

达芬奇MacOS最新中文版 DaVinci Resolve Studio 18中文注册秘钥

DaVinci Resolve Studio 18是一款专业的视频编辑软件&#xff0c;它具有多种强大的功能。首先&#xff0c;它提供了丰富的视频剪辑工具&#xff0c;如剪切、复制、粘贴、剪辑、缩放和移动等&#xff0c;使用户可以轻松地剪辑和组合视频素材。其次&#xff0c;该软件还支持多个轨…

【嵌入式-Linux】安装实时内核

原文链接&#xff1a;Docs 所有内容链接&#xff1a;博客学习目录_Howe_xixi的博客-CSDN博客 参考链接&#xff1a;Ubuntu 18.04安装 RT-PREEMPT 实时内核及补丁【过程记录】_fully preemptible kernel(rt)_黄小白的进阶之路的博客-CSDN博客 Ubuntu20.04编译Linux内核_zstd: n…

1024程序员节,一个ETL工程师的日常工作

“1024这个数字对程序员来说为什么很特别&#xff1f;” 这是因为 计算机硬件的运算进制大多是二进制 但是二进制太小了 所以聪明的程序猿就以2的10次幂来作为大多数程序的运算进制 而2⁰ 1024 例如&#xff1a;1G1024MB &#xff1b;1MB1024KB 1024 MB 1GB “一级棒…

静态划分信道(信道划分介质访问控制)

经过前面的总结和学习&#xff0c;我们再来总结一下信道划分介质访问控制。 一、传输数据的两种链路 首先&#xff0c;在数据链路层中我们有提到传输数据的两种链路&#xff1a;点对点式链路以及广播式链路。 点对点式链路&#xff1a; 两个相邻节点通过一个链路相连&#…

Qt扫描-QMoive 理论总结

QMoive 理论总结 一、概述二、使用1. 使用2. 信号发出时机 三、控制的相关槽函数四、信号 一、概述 QMovie类是一个使用QImageReader播放 动画 的方便类。这个类用于显示没有声音的简单动画&#xff0c;一般即是 gif 动画。如果要显示视频和媒体内容&#xff0c;请使用Qt Mult…

Flutter最全面试题大全

在理解这些问题之前&#xff0c;建议看一下Flutter架构原理&#xff0c;如下链接&#xff1a; https://blog.csdn.net/wang_yong_hui_1234/article/details/130427887?spm1001.2014.3001.5501 目录 一. 有个Text节点&#xff0c;由于文字内容过多&#xff0c;发生了溢出错误&…