当前位置: 首页 > news >正文

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

相关文章:

  • ubuntu22.04@laptop OpenCV Get Started: 004_cropping_image
  • MySQL数据库⑨_事务(四个属性+回滚提交+隔离级别+MVCC)
  • 记一次页面接口502问题:“502 Bad Gateway”
  • 【docker 的常用命令——详细讲解】
  • 内网穿透工具
  • web3知识体系汇总
  • 用HTML5 + JavaScript绘制花、树
  • 力扣精选算法100道——【模板】前缀和 (二维)
  • Swift Combine 有序的异步操作 从入门到精通十二
  • 算法刷题:盛水最多的容器
  • MogaNet:高效的多阶门控聚合网络
  • 怎么使用ChatGPT提高工作效率?
  • TypeScript 入门
  • 互联网加竞赛 基于深度学习的行人重识别(person reid)
  • 从Linux network namespace 认识 Docker 网络模型
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 《深入 React 技术栈》
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • echarts的各种常用效果展示
  • JAVA_NIO系列——Channel和Buffer详解
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Promise初体验
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Spring框架之我见(三)——IOC、AOP
  • Vue.js源码(2):初探List Rendering
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关于字符编码你应该知道的事情
  • 理清楚Vue的结构
  • 听说你叫Java(二)–Servlet请求
  • 突破自己的技术思维
  • - 转 Ext2.0 form使用实例
  • raise 与 raise ... from 的区别
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # .NET Framework中使用命名管道进行进程间通信
  • #android不同版本废弃api,新api。
  • #DBA杂记1
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014#Day.2 T3 解方程
  • $.ajax()
  • (11)MATLAB PCA+SVM 人脸识别
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (LeetCode 49)Anagrams
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (安卓)跳转应用市场APP详情页的方式
  • (多级缓存)多级缓存
  • (理论篇)httpmoudle和httphandler一览
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)WLAN定义和基本架构转
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .describe() python_Python-Win32com-Excel