算法打卡day28|贪心算法篇02|Leetcode 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

算法题

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

题目链接:122.买卖股票的最佳时机 II

 大佬视频讲解:买卖股票的最佳时机 II视频讲解

 个人思路

因为只有一只股票,且两天作一个交易单元,那每次只收集正利润就可以最终最多可以获取的利润,可以用贪心。

解法
贪心法

从下图可以发现,其实收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而且只需要关注最终利润,不需要记录区间

局部最优:收集每天的正利润,全局最优:求得最大利润

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

时间复杂度:O(n!);(遍历整个数组)

空间复杂度:O(1);(常量级的变量)


 Leetcode  55. 跳跃游戏

题目链接:55. 跳跃游戏

大佬视频讲解:跳跃游戏视频讲解

个人思路

可以每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围,当覆盖范围盖过终点 就代表能跳到终点。每步取最优,最后推出全局最优,用贪心。

解法
贪心法

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

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

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

i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。而 cover 每次只取 max;如果 cover 大于等于了终点下标,直接 return true 。

class Solution {public boolean canJump(int[] nums) {if (nums.length == 1) {return true;}int coverRange = 0; //覆盖范围, 初始覆盖范围应该是0,因为下面的迭代是从下标0开始的//在覆盖范围内更新最大的覆盖范围for (int i = 0; i <= coverRange; i++) {coverRange = Math.max(coverRange, i + nums[i]);if (coverRange >= nums.length - 1) {//找到覆盖终点return true;}}return false;}
}

时间复杂度:O(n!);(遍历整个数组)

空间复杂度:O(1);(常量级的变量)


 Leetcode  45.跳跃游戏 II

题目链接:45.跳跃游戏 II

大佬视频讲解:跳跃游戏 II视频讲解

 个人思路

这道题和上一题思路类似;只是本题要计算最少步数。在计算时,当前可移动距离尽可能多走,如果还没到终点,步数再加一。一步尽可能多走,从而达到最少步数。局部可以推全局,用贪心。

解法
贪心法

在解题时要注意,不能真的能跳多远就跳多远,那样就不知道下一步最远能跳到哪里了。

要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数.

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

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

class Solution {public int jump(int[] nums) {int result = 0;//步数int end = 0;// 当前覆盖的最远距离下标int temp = 0;// 下一步覆盖的最远距离下标//移动下标i只要遇到当前覆盖最远距离的下标,直接步数加一for (int i = 0; i <= end && end < nums.length - 1; ++i) {temp = Math.max(temp, i + nums[i]);//更新最大覆盖范围if (i == end) {// 可达位置的改变次数就是跳跃次数end = temp;result++;}}return result;}
}

时间复杂度:O(n);(遍历整个数组)

空间复杂度:O(1);(常量级变量)


 以上是个人的思考反思与总结,若只想根据系列题刷,参考卡哥的网址代码随想录算法官网

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

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

相关文章

haproxy和keepalived的区别与联系

HAProxy&#xff08;High Availability Proxy&#xff09; 是一个开源的、高效且可靠的解决方案&#xff0c;主要用于负载均衡。它工作在应用层&#xff08;第七层&#xff09;&#xff0c;支持多种协议&#xff0c;如HTTP、HTTPS、FTP等。HAProxy通过健康检查机制持续监控后…

Unity 学习日记 8.2D物理引擎

1.2D刚体的属性和方法 2.碰撞器

window GPU 知识总结

1、gpu压测工具总结 参考链接&#xff1a;windows cpu、gpu 压测工具-腾讯云开发者社区-腾讯云 2、gpu 驱动安装过程 参考链接&#xff1a;windows10nvidia驱动cuda10.1cudnn安装教程-腾讯云开发者社区-腾讯云 3、执行nvidia-smi命令过程 参考链接&#xff1a;Windows10 中…

[单调队列] 滑动窗口

滑动窗口 /【模板】单调队列 题目描述 有一个长为 n n n 的序列 a a a&#xff0c;以及一个大小为 k k k 的窗口。现在这个从左边开始向右滑动&#xff0c;每次滑动一个单位&#xff0c;求出每次滑动后窗口中的最大值和最小值。 例如&#xff0c;对于序列 [ 1 , 3 , − …

Android第一行代码——快速入门 Kotlin 编程(5.4 动态加载布局的技巧)

目录 5.4 动态加载布局的技巧 5.4.1 使用限定符 5.4.2 使用最小宽度限定符 5.4 动态加载布局的技巧 虽然动态添加 Fragment 的功能很强大,可以解决很多实际开发中的问题,但是它毕竟只是在一 个布局文件中进行一些添加和替换操作。如果程序能够…

产品推荐 | 基于 Zynq UltraScale+ XCZU27DR的 FACE-RFSoC-C高性能自适应射频开发平台

一、产品概述 FACE-RFSOC-C自适应射频开发平台&#xff0c;是FACE系列新一代的产品。 平台搭载有16nm工艺的Zynq UltraScale™ RFSoC系列主器件。该器件集成数千兆采样RF数据转换器和ARM Cortex-A53处理子系统和UltraScale可编程逻辑&#xff0c;是一款单芯片自适应射频平台。…

24计算机考研调剂 | 广州医科大学

广州医科大学何玉成老师招收机器人、生物医学工程、机械自动化相关专业学硕调剂生 考研调剂相关信息 一、单位简介 广州医科大学是一所以医学为优势和特色的国家“双一流”建设高校。生物医学工程学院于2022年4月成立&#xff0c;由中国科学院院士徐涛教授担任院长。学…

Docker在虚拟机中的基本配置

1、Docker解决依赖兼容问题&#xff0c;Docker是如何实现的呢&#xff1f; Docker为了解决依赖的兼容问题的&#xff0c;采用了两个手段&#xff1a; - 将应用的Libs&#xff08;函数库&#xff09;、Deps&#xff08;依赖&#xff09;、配置与应用一起打包 - 将每个应用放到…

IOS面试题编程机制 56-60

56. IOS自动释放池是什么,如何工作?自动释放池是cocoa提供的帮助我们管理对象内存的一个工具。当我们像一个对象发送autorelease消息时,这个对象就自动加入到最新的自动释放池中,当自动释放池被销毁的时候,会自动向自动释放池中的所有对象发送一条release消息。也就是说我们…

玩具蛇(蓝桥杯)

文章目录 玩具蛇题目描述答案&#xff1a;552dfs 玩具蛇 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有一条玩具蛇&#xff0c;一共有 16 节&#xff0c;上面标着数字 1 至 16。每一节都是一个正方形的形…

seata测试demo(订单)

seata工作流程: seata对分布式事务的协调和控制就是31 1>XID&#xff1a;XID是全局事务的唯一标识&#xff0c;它可以在服务的调用链路中传递&#xff0c;绑定到服务的事务上下文中。 3>TC->TM->RM TC:事务协调器>就是seata 负责维护全局事务和分支事务的状…

webpack快速基础

文章目录 webpack快速基础1. 概念1.1 入口1.2 输出(output)1.3 loader1.4 插件&#xff08;plugin) 2. 建立项目&#xff0c;用于测试功能2.1 安装webpack&#xff0c;2.2 创建webpack配置文件,2.3 配置package.json&#xff0c;运行项目 3. 配置 mode 开发环境4. 配置 entry 编…

【设计模式】工厂方法模式详解

在java中&#xff0c;万物皆对象&#xff0c;这些对象都需要创建&#xff0c;如果创建的时候直接new该对象&#xff0c;就会对该对象耦合严重&#xff0c;假如我们要更换对象&#xff0c;所有new对象的地方都需要修改一遍&#xff0c;这显然违背了软件设计的开闭原则。如果我们…

STP生成树——解决二层组网环路

目录 一.二层组网环路 1.广播风暴 2.MAC地址漂移 3.有没有三层环路 二.STP生成树 &#xff08;1&#xff09;工作原理 &#xff08;2&#xff09;STP概念 1.桥ID&#xff08;BID) 2.根桥 3.COST 4.RPC 5. Rort ID ——本端 6.BPDU报文 7.PID&#xff08;Port ID&…

语音识别文字 免费 openai-whisper

语音和别文字 git地址 https://github.com/openai/whisper 简单的测试一下功能 具体使用请访问 git 环境搭建 python 环境 pip install githttps://github.com/openai/whisper.git自行安装 ffmpeg 命令行工具 测试效果 # "/Users/mac/Downloads/aad.mp3" 为本…

ARM-IIC实验

要求 设置温度湿度阈值&#xff0c;当温度过高时&#xff0c;打开风扇&#xff0c;蜂鸣器报警 当湿度比较高时&#xff0c;打开LED1灯&#xff0c;蜂鸣器报警 现象视频 IIC.mp4 代码实现 main.c #include"si7006.h" #include"led.h" #include"f…

IDC:2027年中国网络安全市场规模将超200亿美元

IDC于近日发布了2024年V1版IDC《全球网络安全支出指南》(IDC Worldwide Security Spending Guide)。IDC数据显示&#xff0c;2022年全球网络安全IT总投资规模为1890.1亿美元&#xff0c;并有望在2027年增至3288.8亿美元&#xff0c;五年复合增长率&#xff08;CAGR&#xff09;…

若依ruoyi-vue实现excel导入导出

文章目录 Excel注解excel数据导入前端实现后端实现 下载模板前端实现后端实现 excel数据导出前端实现后端实现 自定义标题信息导出用户管理表格新增标题&#xff08;用户列表&#xff09;导入表格包含标题处理方式 自定义数据处理器自定义隐藏属性列导入对象的子对象导出对象的…

FakeLocation报虚拟位置服务连接失败,请重启设备再试

虚拟位置服务连接失败&#xff0c;请重启设备再试 最近遇到一个手机软件报的bug“虚拟位置服务连接失败&#xff0c;请重启设备再试” 因为我的实体“虚拟机”已经root&#xff0c;按道理是不可能报这个错的 折腾了2天&#xff0c;终于解决了 原来是这样&#xff0c;安装最新…

龙智亮相2024国际集成电路展览会暨研讨会(IIC Shanghai),分享芯片研发及管理解决方案与技术实践

2024年3月28-29日&#xff08;周四-周五&#xff09;&#xff0c;上海张江科学会堂&#xff0c;2024国际集成电路展览会暨研讨会&#xff08;IIC Shanghai 2024&#xff09;即将盛大开幕。龙智携芯片研发及管理解决方案、最佳实践与案例&#xff0c;以及惊喜大奖在#1A14展位等着…