代码随想录算法训练营day32

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

参考链接:代码随想录

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

思路:本题我一开始想到的是参考前面的摆动序列,先用坡度图思考,我们要返回最大利润,即要做到不放过任何一个上坡。把每个上坡的距离加起来就是答案,这明显也满足局部最优推出全局最优。时间复杂度O(n)。

class Solution {
public:int maxProfit(vector<int>& prices) {if(prices.size()<=1){return 0;}int ans=0;for(int i=1;i<prices.size();i++){//前面已经排除了0的情况,所以直接从1开始if(prices[i]>=prices[i-1]){//只要不跌一切都好说ans+=(prices[i]-prices[i-1]);}}return ans;}
};

本题想起来也不难,主要是想到坡度就容易了。标答解释就是收集每天的正利润。也不需要长度为1单独考虑。
标答:

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;}
};

DP方法跳过。

55. 跳跃游戏

思路:本题由于跳跃步数可以自由选,故只要在我们的跳跃范围内,全部都可以跳到,只要一次遍历整个数组,当跳跃范围覆盖到末尾即返回true,如果还没遍历到数组末尾就已经超出了覆盖范围,说明不可能到达末尾,返回false。时间复杂度O(n)。

class Solution {
public:bool canJump(vector<int>& nums) {int range=0;for(int i=0;i<nums.size()&&i<=range;i++){//i还需要在覆盖范围内if(range<i+nums[i]){//更新覆盖范围range=i+nums[i];}if(range>=nums.size()-1){return true;}}return false;}
};

本题的关键点是想到使用范围来覆盖。

45.跳跃游戏II

思路:本题和上题的区别是题目说了一定可以到达末尾,而要返回最小跳跃次数。想不到方法,直接看答案。要以最小的步数增加覆盖范围,覆盖范围一旦到达终点,那么就是答案。考虑两步的覆盖范围,即这一步的最大覆盖范围和下一步的最大覆盖范围,如果这一步怎么都走不到终点,那么就需要开始考虑下一步的覆盖范围了,具体怎么跳我们不用考虑,但我们知道两步一定可以达到这么的最大覆盖范围,如果还没到终点就继续往后,直到覆盖终点为止。时间复杂度O(n)。

class Solution {
public:int jump(vector<int>& nums) {if(nums.size()==1) return 0;int curRange=0;//一开始初始化为0int nextRange=0;int ans=0;for(int i=0;i<nums.size();i++){nextRange=max(nextRange,i+nums[i]);//不断更新下一步最大覆盖范围if(i==curRange){//遍历到的当前最大下标,但是肯定还没到终点ans++;curRange=nextRange;if(nextRange>=nums.size()-1){break;}}}return ans;}
};

代码的主要亮点是首先将curRange初始化为0,这样以开始就可以进行nextRange的计算。

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

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

相关文章

C++ 字符串OJ

目录 1、14. 最长公共前缀 2、 5. 最长回文子串 3、 67. 二进制求和 4、43. 字符串相乘 1、14. 最长公共前缀 思路一&#xff1a;两两字符串进行比较&#xff0c;每次比较过程相同&#xff0c;可以添加一个函数辅助比较&#xff0c;查找最长公共前缀。 class Solution { pu…

【C++】函数模板和类模板

目录 1.泛型编程 2.函数模板 2.1函数模板的定义格式 2.2函数模板的实例化 2.3函数模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 3.3模板的分离编译 1.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段…

php开发100问?

什么是 PHP&#xff1f;PHP 是一种什么类型的语言&#xff1f;PHP 的优缺点是什么&#xff1f;如何在服务器上配置 PHP&#xff1f;PHP 中的变量是如何声明和使用的&#xff1f;如何在 PHP 中输出文本和变量&#xff1f;什么是 PHP 的数据类型&#xff1f;如何在 PHP 中实现条件…

【前端CSS】CSS的3种基本选择器和5种高级选择器使用方式

目录 前言 基本选择器 1.1 标签选择器 1.2 ID选择器 1.3 类选择器 高级选择器 2.1 并集选择器 2.2 交集选择器 2.3 后代选择器 2.4 子元素选择器 2.5 属性选择器 前言 1W&#xff1a;什么是CSS选择器&#xff1f; CSS选择器由HTML元素的id、class属性或元素名本身以及…

SpringBoot中定时任务、corn表达式

SpringBoot中定时任务、corn表达式 corn表达式网站&#xff1a;https://cron.qqe2.com/ 方法上加上Scheduled(cron表达式) 启动类上加上EnableScheduling 示例 启动类上 启动类加上EnableScheduling开启定时任务。 SpringBootApplication EnableScheduling public class…

vue 在什么情况下在数据发生改变的时候不会触发视图更新

在 Vue 中&#xff0c;通常数据发生变化时&#xff0c;视图会自动更新。但是&#xff0c;有几种情况可能导致数据变化不会触发视图更新&#xff1a; 1.对象属性的添加或删除&#xff1a; Vue 无法检测到对象属性的添加或删除。因为 Vue 在初始化实例时对属性执行了 getter/se…

VUE3 使用axios网络请求

1.新建工程 参考&#xff0c;VUE3 环境搭建&#xff1a;https://blog.csdn.net/LQ_001/article/details/136293795&#xff0c;运行命令 vue create vue-demo 2.引入axios 不管何种引用&#xff0c;都要在工程中安装 axios 包。安装命令&#xff1a;npm install --save axio…

C语言——函数指针——函数指针变量(详解)

函数指针变量 函数指针变量的作用 函数指针变量是指向函数的指针&#xff0c;它可以用来存储函数的地址&#xff0c;并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面&#xff1a; 回调函数&#xff1a;函数指针变量可以作为参数传递给其他函数&…

高性能JSON框架之FastJson的简单使用

高性能JSON框架之FastJson的简单使用、 1.前言 1.1.FastJson的介绍: JSON协议使用方便&#xff0c;越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架,Github地址: FastJson 1.2.FastJson的特点: 1.F…

C/C++蓝桥杯之日期问题

问题描述&#xff1a;小明正在整理一批文献&#xff0c;这些文献中出现了很多日期&#xff0c;小明知道这些日期都在1960年1月1日至2059年12月31日之间&#xff0c;令小明头疼的是&#xff0c;这些日期采用的格式非常不统一&#xff0c;有采用年/月/日的&#xff0c;有采用月/日…

蓝桥杯刷题--python-20-多路归并,贡献法

1262. 鱼塘钓鱼 - AcWing题库 nint(input()) a[0]list(map(int,input().split())) b[0]list(map(int,input().split())) l[0]list(map(int,input().split())) spend[0 for i in range(n1)] for i in range (1,n): l[i]l[i-1] tint(input()) def get(k): return max(0,a…

拿捏算法的复杂度

目录 前言 一&#xff1a;算法的时间复杂度 1.定义 2.简单的算法可以数循环的次数&#xff0c;其余需要经过计算得出表达式 3.记法&#xff1a;大O的渐近表示法 表示规则&#xff1a;对得出的时间复杂度的函数表达式&#xff0c;只关注最高阶&#xff0c;其余项和最高阶…

【音视频开发好书推荐2】《FFmpeg 音视频开发基础与实战》

1、多媒体处理开源库FFmpeg概述 享有盛名的音视频多媒体处理开源库FFmpeg&#xff0c;做过音视频编解码开发的同学基本都用过&#xff0c;即便没做过这方面开发&#xff0c;也会听说过这个开源库。 FFmpeg是目前最全面的开源音视频编解码库&#xff0c;包括常用的音视频编码协议…

JavaScript原型和原型链

JavaScript每个对象拥有一个原型对象 需要注意的是&#xff0c;只有函数对象才有 prototype 属性 当试图访问一个对象的属性时&#xff0c;它不仅仅在该对象上搜寻&#xff0c;还会搜寻该对象的原型&#xff0c;以及该对象的原型的原型&#xff0c;依次层层向上搜索&#xff…

C++指针(五)完结篇

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 前言 相关文章&#xff1a;C指针&#xff08;一&#xff09;、C指针&#xff08;二&#xff09;、C指针&#xff08;三&#xff09;、C指针&#xff08;四&#xff09;万字图文详解&#xff01; 本篇博客是介…

ai学习前瞻-python环境搭建

python环境搭建 Python环境搭建1. python的安装环境2. MiniConda安装3. pycharm安装4. Jupyter 工具安装5. conda搭建虚拟环境6. 安装python模块pip安装conda安装 7. 关联虚拟环境运行项目 Python环境搭建 1. python的安装环境 ​ python环境安装有4中方式。 从上图可以了解…

Vuforia Engine 支持的操作系统、工具和设备版本

支持的版本 Vuforia Engine 支持以下操作系统、工具和设备版本,以便使用 Vuforia Engine 平台开发应用程序。 移动设备

物联网电气融合实训室建设方案

1 教学实训总体设计 1.1 建设背景 &#xff08;一&#xff09;政策推动与战略部署 近年来&#xff0c;物联网技术在全球范围内得到了广泛的关注和应用。作为信息技术的重要组成部分&#xff0c;物联网在推动经济转型升级、提升社会管理水平、改善民生福祉等方面发挥着重要作…

python实现桶排序

排序算法&#xff1a; python实现基数排序 python实现归并排序 python实现交换排序 python实现选择排序 python实现插入排序 python实现桶排序 桶排序&#xff08;Bucket Sort&#xff09;是一种排序算法&#xff0c;它将待排序的元素分到有限数量的桶&#xff08;buckets&…

Ps:清理

清理 Purge命令位于“编辑”菜单下&#xff0c;它主要用于释放 Photoshop 使用的内存资源&#xff0c;有助于提高系统的性能。 通过使用“清理”命令&#xff0c;用户可以有效管理 Photoshop 的资源使用&#xff0c;特别是在处理大型文件或进行长时间编辑会话时。 定期清理可以…