LeetCode、901. 股票价格跨度【中等,单调栈】

文章目录

  • 前言
  • LeetCode、901. 股票价格跨度【中等,单调栈】
    • 题目链接及分类
    • 思路
      • 思路1:暴力
      • 思路2:单调栈写法
      • 优化:单调栈简化写法(数组替代栈集合)
  • 资料获取

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


LeetCode、901. 股票价格跨度【中等,单调栈】

题目链接及分类

题目链接:LeetCode、901. 股票价格跨度

分类:数据结构/栈/单调栈


思路

思路1:暴力

复杂度分析:n次next()为时间复杂度O(n2)

class StockSpanner {private List<Integer> list;//1万数据量,O(n)、O(nlogn)//题意:找到距离当前的最大连续长度public StockSpanner() {list = new ArrayList<>();}//暴力O(n)public int next(int price) {int count = 1;for (int i = list.size() - 1; i >= 0; i--) {if (list.get(i) <= price) count++;else break;}list.add(price);return count;}
}

image-20221021091123612


思路2:单调栈写法

复杂度分析:n次next()为时间复杂度O(n)

class StockSpanner {private Stack<Pair<Integer, Integer>> stack = new Stack<>();//1万数据量,O(n)、O(nlogn)public StockSpanner() {}//数据集 及  结果集//[100,80,60,70,60,75,85]   [1,1,1,2,1,4,6]//处理的过程://(100,1)、(80, 1)、(60, 1)//(100,1)、(80,1)、(70, 2)、(60, 1)//(100,1)、(80,1)、(70, 2)、(75,2)//(100,1)、(85,6)//单调栈解法//记录两个值(price价格、和当日价格的跨度)//每次next()的时间复杂度O(1),那么n次next()调用就是O(n)的复杂度public int next(int price) {int res = 1;//维护一个最大值while (!stack.isEmpty() && price >= stack.peek().getKey()) {int len = stack.peek().getValue();//弹出当前的stack.pop();res += len;}//入栈stack.push(new Pair<Integer, Integer>(price, res));return res;}
}

image-20240213160301181


优化:单调栈简化写法(数组替代栈集合)

效果:减少了入栈出栈的开销

复杂度分析:n次next()为时间复杂度O(n)

class StockSpanner {//存储价格private int[] prices = new int[10000];//存储对应价格当前的跨度private int[] lens = new int[10000];//表示当前的指针位置private int pos = -1;public StockSpanner() {}//学习题解:https://leetcode.cn/submissions/detail/375037369///price next pos//100   1     0//80    1     1//60    1     2  //70    2     3//60    1     4//75    4     5//85    6     6public int next(int price) {int res = 1;//初始值//计算跨度int cur = pos;//单调栈(注意cur -= lens[cur],下次定位就直接定位到该元素位置-跨度的地方再做比较)while (cur >= 0 && price >= prices[cur]) {cur -= lens[cur];}//记录[cur, pos]的长度(也就是之间的跨度)res += (pos - cur);//记录价值以及跨度++pos;prices[pos] = price;lens[pos] = res;return res;}
}

image-20221021093801270


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 时间:2024.2.13

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

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

相关文章

别人卖了 2W 的一套 ChatGPT 自动身份提示词!

别人卖了 2W 的一套 ChatGPT 自动身份提示词! 英文版 You are an Expert level ChatGPT Prompt Engineer with expertise in various subject matters. Throughout our interaction, you will refer to me as (your name). Lets collaborate to create the best possible Cha…

深度学习-吴恩达L1W2作业

作业1&#xff1a;吴恩达《深度学习》L1W2作业1 - Heywhale.com 作业2&#xff1a;吴恩达《深度学习》L1W2作业2 - Heywhale.com 作业1 你需要记住的内容&#xff1a; -np.exp&#xff08;x&#xff09;适用于任何np.array x并将指数函数应用于每个坐标 -sigmoid函数及其梯度…

springboot180基于spring boot的医院挂号就诊系统

医院挂号就诊系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其…

Excel练习:折线图突出最大最小值

Excel练习&#xff1a;折线图突出最大最小值 ​​ 要点&#xff1a;NA值在折现图中不会被绘制&#xff0c;看似一条线&#xff0c;实际是三条线。换成0值和""都不行。 ‍ 查看所有已分享Excel文件-阿里云 ‍ 学习的这个视频&#xff1a;Excel折线图&#xff0c…

使用文件读取的open 函数,让你的csv pandas 尾部插入快如闪电

文章目录 简介1. pandas loc 尾部插入方法loc 尾部插入的速度 2. open 方法open方法 处理csv的速度open方法 处理csv代码 简介 笔者在处理稍大型(几十万条)的csv文件时&#xff0c;发现在csv文件中&#xff0c;使用panda的loc方法进行拼接&#xff0c;速度太过于缓慢。 笔者提…

盐值1111

盐值处理简介 1.1 定义与概述 "盐值"是一个术语&#xff0c;通常在密码哈希中使用。当存储或传输密码时&#xff0c;系统不会&#xff08;或不应&#xff09;直接存储或传输用户的明文密码。相反&#xff0c;会通过哈希函数将密码转换成哈希值。问题在于&#xff0…

【面试】国家公务员考试复试,面试内容准备方向(非技术面试考察点)

【面试】国家公务员考试复试&#xff0c;面试内容准备方向&#xff08;非技术面试考察点&#xff09; 说明&#xff1a; csdn无法发部分考试相关例题&#xff08;提示涉z&#xff09;&#xff0c;所以本文主要还是针对评分标准和仪表等相关因素。 文章目录 1、面试试卷与评分1.…

前端架构: 实现脚手架处理简单的命令注册和参数解析

实现简单的命令注册和参数解析 1 &#xff09;概述 这里不会使用任何第三方工具&#xff0c;而是给大家讲解一下参数解析的一个实现原理实现两个目标 第一目标是注册一个命令 $ xyzcli init 这个命令就可以完成一个自己的操作第二个是实现参数解析 希望能够实现 --version 的一…

春节专题|产业7问:区块链厂商的现在和未来——基础设施厂商

2023转瞬即逝&#xff0c;不同于加密领域沉寂一整年后在年末集中爆发&#xff0c;对于我国的区块链厂商而言&#xff0c;稳中求胜才是关键词&#xff0c;在平稳发展的基调下&#xff0c;产业洗牌也悄无声息的到来。 从产业总体而言&#xff0c;在经过了接近3年的快速发展后&…

C语言系列1——详解C语言:变量、常量与数据类型

目录 写在开始1. 变量与常量的概念1.1. 变量1.2. 常量1.3. 变量与常量的比较1.4. 选择变量还是常量 2. C语言中的基本数据类型2.1. 整型&#xff08;Integer Types&#xff09;2.2. 浮点型&#xff08;Floating-Point Types&#xff09;2.3. 字符型&#xff08;Character Type&…

android studio下开发flutter

文章目录 1. 配置环境 https://flutter.cn/docs/get-started/install2. android studio下开发flutter 1. 配置环境 https://flutter.cn/docs/get-started/install 2. android studio下开发flutter 打开Android Studio -> File -> Settings -> Plugins 搜索Dart插件 …

Linux和Windows文件共享实现方式

安装 samba 服务 sudo apt-get install samba samba-common新增用户 groupadd sfp -g 6000 useradd sfp -u 6000 -g 6000 -s /sbin/nologin -d /dev/null设置密码 sudo smbpasswd -a sfp修改配置文件 sudo vi /etc/samba/smb.conf追加参数 [file]comment sfpfile #说明…

C++ 动态规划 计数类DP 整数划分

一个正整数 n 可以表示成若干个正整数之和&#xff0c;形如&#xff1a;nn1n2…nk &#xff0c;其中 n1≥n2≥…≥nk,k≥1 。 我们将这样的一种表示称为正整数 n 的一种划分。 现在给定一个正整数 n &#xff0c;请你求出 n 共有多少种不同的划分方法。 输入格式 共一行&…

【vue3学习笔记】shallowReactive与shallowRef;readOnly与shallowReadOnly;toRaw与markRaw

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P158节 《shallowReactive与shallowRef》笔记&#xff1a; reactive()与shallowReactive()&#xff1a;reactive()处理后的数据是响应式的&#xff0c;对象内嵌套的深层结构全部是响应式的。shallowReactive()处理后的数据…

Javaweb之SpringBootWeb案例之propagation属性案例演示的详细解析

案例 接下来我们就通过一个案例来演示下事务传播行为propagation属性的使用。 需求&#xff1a;解散部门时需要记录操作日志 由于解散部门是一个非常重要而且非常危险的操作&#xff0c;所以在业务当中要求每一次执行解散部门的操作都需要留下痕迹&#xff0c;就是要记录操作…

蓝桥杯每日一题----唯一分解定理

唯一分解定理 1.内容 任何一个大于1的整数n都可以分解成若干个质数的连乘积&#xff0c;如果不计各个质数的顺序&#xff0c;那么这种分解是惟一的&#xff0c;即若n>1&#xff0c;则有 n ∏ p i j n\prod{p^j_i} n∏pij​ 这里的 p i p_i pi​是质数。可以进行简单证明…

C语言字符串处理

在 C 语言中&#xff0c;字符串是以字符数组的形式表示的&#xff0c;以空字符 \0 结尾。C 语言提供了一系列的字符串处理函数&#xff0c;可以用于字符串的操作、查找、比较等。以下是一些常用的 C 语言字符串处理函数&#xff1a; 1. 字符串定义与初始化 #include <stdi…

【数据结构】链表OJ面试题4《返回链表入环的第一个结点》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 10. 给定一个链表&#xff0c;返回链表开始…

golang集成sentry: go-redis

网上没有找到go-redis集成sentry的库&#xff0c; 所以我简单实现了一个 代码&#xff1a; https://github.com/Shujie-Tan/go-redis-sentry 使用方法&#xff1a; import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry" ) rdb : redis.NewClient(&re…

如何一键启动、停止或重启运行在服务器内的幻兽帕鲁游戏服务进程?

如果你是用腾讯云轻量应用服务器一键部署的幻兽帕鲁服务器&#xff0c;那么可以在面板一键启动、停止或重启运行在服务器内的幻兽帕鲁游戏服务进程&#xff08;注意并非对服务器整机进行操作&#xff09;&#xff0c;无需手动在服务器内部运行命令。 详细教程地址&#xff1a;h…