算法训练营第三十二天||122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

news2024/10/6 16:27:17

122.买卖股票的最佳时机

本题首先要清楚两点:

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

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

#贪心算法

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

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

如何分解呢?

假如第 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) {
        vector<int> res;
        for(int i = 0;i<prices.size()-1;i++){
            res.push_back(prices[i+1]-prices[i]);
        }
        int sum = 0;
        for(int i = 0;i<res.size();i++){
            if(res[i]>0){
                sum += res[i];
            }
        }
        return sum;
    }
};

55. 跳跃游戏 

刚看到本题一开始可能想:当前位置元素如果是 3,我究竟是跳一步呢,还是两步呢,还是三步呢,究竟跳几步才是最优呢?

其实跳几步无所谓,关键在于可跳的覆盖范围!

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

这个范围内,别管是怎么跳的,反正一定可以跳过来。

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

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

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

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

如图:

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

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

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

 

class Solution {
public:
    bool canJump(vector<int>& nums) {
        if(nums.size()==1) return true;
        int cover = 0;
        for(int i = 0;i<=cover;i++){
            cover = max(cover,i+nums[i]);
            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 cur = 0;//当前覆盖最远距离下标
        int next = 0;//下一步覆盖最远下标
        int cover = 0;//记录走的最大步数
        for(int i = 0;i<nums.size();i++){
            next = max(next,i+nums[i]);//更新下一步覆盖最远距离下标
            if(i == cur){//当遇到当前覆盖最远距离下标
                if(i<nums.size()-1){
                    cover++;//走下一步
                    cur = next;//更新目前覆盖最远下标
                    if(cur>=nums.size()-1) break;//当到达终点或者以后
                }else{
                    break;
                }
            }
        }
        return cover;
    }
};

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

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

相关文章

7-2 九牛一毛

7-2 九牛一毛 分数 5 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 这是一道脑筋急转弯题&#xff1a;猪肉一斤 15 元&#xff0c;鸡肉一斤 20 元&#xff0c;那么一毛钱能买多少头牛&#xff1f; 答案是&#xff1a;9 —— 因为“九牛一毛”。 本题就请你按照这个逻辑…

百度地图 —— 给InfoWindow文本添加点击事件

前言&#xff1a; 需求描述&#xff1a;点击Marker标记出现infoWindow文本框&#xff0c;点击文本框中的红色框中的文字&#xff0c;出现侧边栏 代码实现&#xff1a;

js-二维子矩阵的和

// 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; // 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的左上角为(row1, col1) &#xff0c;右下角为(row2, col2) 。// 实现 NumMatrix 类&#xff1a;// NumMatrix(int[][] matrix) 给定整数矩阵 matr…

刷题日记07《回溯算法》

题目描述 力扣https://leetcode.cn/problems/VvJkup/ 给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2…

STM32 Proteus仿真ILI9341显示电桥电子秤重量测量差分放大电路 -0062

STM32 Proteus仿真ILI9341显示电桥电子秤重量测量差分放大电路 -0062 Proteus仿真小实验&#xff1a; STM32 Proteus仿真ILI9341显示电桥电子秤重量测量差分放大电路 -0062 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 ILI9341TFT显示器4个电位器组成的电桥电…

好用的文献阅读插件(Easy Scholar、EasyPubMedicine、Sci-Hub X Now!)

目录 一、Easy Scholar 二、EasyPubMedicine 一、Easy Scholar Easy Scholar&#xff1a;自动显示期刊等级&#xff0c;帮助筛选优质论文。 安装&#xff1a; 点击浏览器右上角的“。。。”&#xff0c;选择“扩展”。 点击打开加载项 在浏览器的扩展商店中搜索“easy sch…

MyBatis 中如何使用缓存

MyBatis 中如何使用缓存 MyBatis 是一个基于 Java 的持久层框架&#xff0c;它提供了多种方式来使用缓存&#xff0c;包括一级缓存和二级缓存。本文将介绍 MyBatis 中常见的缓存使用方式及其使用方法。 1. 一级缓存 MyBatis 中的一级缓存是指 SqlSession 的缓存&#xff0c;它…

Android 圆环统计图(带外延折线可点击)

需求先看UI效果图吧 看到这肯定去找轮子&#xff0c;找了半天&#xff0c;没找到相似的&#xff0c;大部分搜到的都是点击外凸&#xff0c;而这个UI是内凸&#xff0c;其实外凸内凸区别还不小&#xff0c;没找到一样的&#xff0c;于是乎&#xff0c;和iOS说好了要不就放弃吧&…

途乐证券-充电性能最高提升3.8倍,固态电池有新突破!

固态电池当时处于起步阶段&#xff0c;工业化仍需时刻。组织预计2030年商场空间有望达200亿元。 固态电池技能继续取得突破发展 过去10年&#xff0c;液态锂离子电池的能量密度现已提高了2倍~3倍&#xff0c;现在现已挨近理论上限。而全固态电池运用固体电解质替代了传统锂离子…

科技资讯|苹果Vision Pro预计2024年末全球发售

据彭博社记者古尔曼消息&#xff0c;苹果首款头显Vision Pro计划于2024年初在美国市场指定店铺进行开售&#xff0c;这些商店将会有专属区域用于产品演示&#xff0c;配备座位、配件和测量尺寸的工具等。知情人士透露&#xff0c;将有270家美国的苹果商店会销售Vision Pro&…

简述MySQL体系结构以及安装部署MySQL

目录 一、简述MySQL体系结构 1、连接层&#xff1a; 2、SQL层&#xff1a; 3、存储引擎层&#xff1a; 4、物理文件层&#xff1a; 5、一条SQL语句执行过程&#xff1a; 二、安装部署MySQL&#xff08;使用yum以及通用二进制方式&#xff09; 1、前期准备 1.1、关闭防火…

金九银十Java八股文面试题整理(含阿里、腾迅大厂java面试真题)

前言 看到了许多朋友在焦急的准备“金九银十”跳槽面试&#xff0c;甚至很多即将毕业的大学生都在备战秋招&#xff0c;对于学历还算优秀的大学生来说&#xff0c;这是一次离大厂最近的机会&#xff0c;毕竟是应届毕业生&#xff0c;不会对技术有非常严格的要求。 而对于工作…

注解开发配置实例

对比一下xm的配置&#xff1a; 新&#xff1a;注解开发&#xff0c;现在任何框架都有两套配置&#xff0c;一套xml配置&#xff0c;一套注解配置 现在我想把user Dao 和user serve 放到spring 中进行配置 service业务层 看到reipaositerei,就是我们Dao 层 用他来标注初始化方…

WORD模板替换,将文件给前端下载

1.word模板设计填充字段加{{填充字段名}} 2.后端依赖 <poi-tl.version>1.7.3</poi-tl.version> <poi.version>4.1.2</poi.version> <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId>&l…

基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目

功能演示 摘要&#xff1a;手势识别是一种通过技术手段识别视频图像中人物手势的技术。本文详细介绍了手势识别实现的技术原理&#xff0c;同时基于python与pyqt开发了一款带UI界面的手势识别系统软件&#xff0c;以便于进行结果显示。手势识别采用了mediapipe的深度学习算法进…

[MMDetection]绘制PR图

评价指标 平均精度与平均召回率 AP 是所有类别的平均值。传统上&#xff0c;这称为“平均精度”(mAP)。我们不区分 AP 和 mAP&#xff08;同样&#xff0c;AR 和 mAR&#xff09; APAP at IoU.50:.05:.95 (primary challenge metric)AP50AP at IoU.50 (PASCAL VOC metric)AP…

数据结构初阶--绪论

目录 一.什么是数据结构 二.什么是算法 三.算法的时间复杂度 四.算法的空间复杂度 五.复杂度练习 题一&#xff1a;消失的数字 题二&#xff1a;旋转数组 一.什么是数据结构 数据结构&#xff1a;是相互之间存在一种或多种特定关系的数据元素的集合。 数据结构的三要素…

【LittleXi】 N-gram模型(C++实现)

LittleXi N-gram模型&#xff08;C实现&#xff09;马尔科夫性 (独立性假设)代码实现英文训练版本中文训练版本 训练效果 N-gram模型&#xff08;C实现&#xff09; 定义&#xff1a;通俗地讲&#xff0c;就是利用前文的单词&#xff0c;来推算下一个最大概率出现的单词 马尔…

Web入门-Web服务器

Web服务器是一个程序软件&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序员不必直接对程序进行操作&#xff0c;让Web开发更加便捷&#xff0c;简化web程序开发。主要功能是“通过网上信息浏览服务”。 Tomcat 概念&#xff1a;Tomcat是阿Apache软件基金会一个核心…

Coggle 30 Days of ML(23年7月)任务八:训练BILSTM模型

Coggle 30 Days of ML&#xff08;23年7月&#xff09;任务八&#xff1a;训练BILSTM模型 任务八&#xff1a;使用Word2Vec词向量&#xff0c;搭建BILSTM模型进行训练和预测 说明&#xff1a;在这个任务中&#xff0c;你将使用Word2Vec词向量&#xff0c;搭建BILSTM模型进行文…