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

news2024/12/23 5:52:51

算法题

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.coloradmin.cn/o/1543749.html

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

相关文章

docker--Dockerfile (三)

1&#xff0c;Dcockerfile是什么 docker推荐使用dockerfile的定义文件和docker build命令来构建镜像。dockerfile使用基本的基于DSL&#xff08;面向领域语言&#xff09;语法的指令来构建Docker镜像。另一种创建Docker镜像的方式是使用docker commit&#xff0c;不推荐使用。 …

深入解析Mybatis-Plus框架:简化Java持久层开发(十三)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节介绍下Mybatis-Plus框架的逻辑删除功能。 &#x1f4d6; 正文 1 逻辑删除介绍 1.1 什么是逻辑删除&#xff1f; 首先我们先来了解下与逻辑删除对应…

手把手教集成环信新版UIKit组件,快速构建Android应用

前言 环信新版UIKit已重磅发布&#xff01;目前包含单群聊UIKit、聊天室ChatroomUIKit&#xff0c;本文详细讲解Android端单群聊UIKit的集成教程。 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库&#xff0c;提供各种组件实现会话列表、聊天界…

redis实战-黑马点评-短信登录

实现登录功能&#xff1a; 发送手机验证码&#xff1a; public Result sendCode(String phone, HttpSession session) {//获取手机号&#xff0c;校验手机号//如果不符合&#xff0c;返回错误信息if (!RegexUtils.isPhoneInvalid(phone)){//判断手机号是否有效return Result.fa…

MCGS学习——运行策略与脚本程序

语法讲解 运行策略&#xff1a;脚本的编程环境启动策略&#xff1a;在进入运行环境后首先运行的策略&#xff0c;只运行一次&#xff0c;一般完成系统初始化的处理循环策略&#xff1a;按照用户指定的周期时间&#xff0c;循环执行策略块内的内容&#xff0c;通常用来完成流程…

pytorch中tensor类型转换的几个函数

目录 IntTensor转FloatTensor FloatTensor转IntTensor Tensor类型变为python的常规类型 IntTensor转FloatTensor .float函数&#xff1a; FloatTensor转IntTensor .int函数 Tensor类型变为python的常规类型 item函数

业务问题:分析最近1周的用户行为转化

1.数据集 2.问题分析 数据部分截图样例&#xff1a; 其中&#xff0c;“行为类型”列中的值有4种&#xff0c;对应4种用户行为&#xff0c;分别是&#xff1a;用户对商品进行浏览、收藏、加购、购买行为。 业务场景&#xff1a; 地点是&#xff1a;公司淘宝店铺 时间范围是&a…

利泰大健康邀您莅临2024第七届燕窝及天然滋补品博览会

2024第七届世界燕窝及天然滋补品博览会 2024年8月7-9日| 上海新国际博览中心 同期举办&#xff1a;第三届世界滋补产业生态大会暨交流晚宴/颁奖典礼 2024第九届酵素、益生产品博览会 2024上海国际月子健康博览会 展会介绍 世界燕窝及天然滋补品展览会暨世界滋补产业生态发…

必备基础01-TypeScript

一、TypeScript W3C、菜鸟、b站都有教程 这里不多说&#xff0c;只是写一下基础&#xff0c;能看懂即可 内容来源于W3Cschool&#xff0c;本章整合只为以后更好查询 1.概述 TypeScript是用于应用程序规模开发的JavaScript。 TypeScript是强类型&#xff0c;面向对象的编译…

JavaWeb后端——HTTP协议/Tomcat

HTTP HTTP协议&#xff1a;无状态&#xff0c;对事务处理没有记忆能力。每次请求-响应都是独立的。后一次请求不会记录前一次请求数据。缺点&#xff1a;多次请求之间不能共享数据&#xff0c;优点&#xff1a;速度快。 HTTP协议请求报文&#xff1a; HTTP协议响应报文&#x…

防火墙是什么?谈谈部署Web防火墙重要性

如今&#xff0c;多云环境、API安全功能扩展、合作伙伴集成即时可用、可用性和可视化增强以及提高自动化程度已经成为基本要求。伴随企业应用架构的迁移&#xff0c;在用户端&#xff0c;需要在部署环境不断扩展但人员技能有限的情况下&#xff0c;保护数量日益增长的应用安全。…

python能做什么

python能做什么 Web开发&#xff1a;Python具有许多流行的Web框架&#xff0c;如Django和Flask&#xff0c;使得它成为Web开发的首选语言。它简洁、易于学习、且拥有丰富的生态系统&#xff0c;能够快速构建高性能的Web应用。 数据科学和机器学习&#xff1a;Python在数据科学…

信息系统项目管理(第四版)(高级项目管理)考试重点整理 第15章 项目风险管理(四)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

附近最小 单调队列 滑动窗口 蓝桥杯

q[t]i 的执行过程如下&#xff1a; 首先&#xff0c;t 的值会先自增 1。然后&#xff0c;新值 i 被赋给 q[t]&#xff0c;即元素 i 被插入到数组 q 的下标为 t 的位置上。 q[t]i 的执行过程如下&#xff1a; 首先&#xff0c;i 的值被赋给 q[t]&#xff0c;即元素 i 被插入到数…

如果碰到这样的项目,即使月薪过万也要尝试一下!2024中国创投圈重点关注项目,2024新蓝海创业项目推荐

同学小龙可以说是我们这帮人中的人生赢家了。从一个普通的大专生&#xff0c;自己升本成功考上了本科生。毕业在合肥磨砺了一年后&#xff0c;当上了采购经理&#xff0c;月入过万。这样的生活可以说已经是大多数人的巅峰了&#xff0c;但是前一段时间小龙却和家里闹了矛盾。 原…

【Leetcode】top 100 二叉树

基础知识补充 完全二叉树&#xff1a;顺序存储&#xff08;数组&#xff09; 非根节点的父节点序号floor((i-1)/2) 序号i的左孩子节点序号2*i1 右孩子节点序号2*i2 一般二叉树&#xff1a;链式存储 结构&#xff1a;left指针指向左子节点&#xff0c;right指针指向右子节点&am…

【OpenModelica】2 交互式使用OpenModelica-下篇

2 交互式使用OpenModelica-下篇 文章目录 2 交互式使用OpenModelica-下篇一、 Trying the system and cd Commands二、 Modelica Library and DCMotor Model三、The val() function四、Clear All Models五、VanDerPol Model and Parametric Plot六、Using Chinese or Japanese …

序列化文件与反序列化文件回顾

对要序列化的文件需要实现Serializable接口&#xff0c;这个接口是一个标签&#xff0c;虽然没有任何抽象方法。 常量serialVersionUID 设置为一个任意值&#xff0c;保证在Student类改变时&#xff0c;原先存在的student可读 实现序列化和反序列化的Test类中代码 package co…

磁钢如何空运?

航空运输具有一定的特殊性&#xff0c;为了保证安全&#xff0c;无论是人还是货物在乘机前都需要做安全检查。如果你乘机时携带了磁性材料&#xff0c;比如钕铁硼强磁&#xff0c;或者客户着急要货希望厂家发货走空运&#xff0c;这时候我们能不能将磁体带上飞机呢&#xff1f;…

JVM(二)——垃圾回收

三、垃圾回收 1、如何判断对象可以回收 1&#xff09;引用计数法 定义&#xff1a; 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是…