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

901. 股票价格跨度

设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。

当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。

  • 例如,如果未来 7 天股票的价格是 [100,80,60,70,60,75,85],那么股票跨度将是 [1,1,1,2,1,4,6] 。

实现 StockSpanner 类:

  • StockSpanner() 初始化类对象。
  • int next(int price) 给出今天的股价 price ,返回该股票当日价格的 跨度 。

示例:

输入:
["StockSpanner", "next", "next", "next", "next", "next", "next", "next"]
[[], [100], [80], [60], [70], [60], [75], [85]]
输出:
[null, 1, 1, 1, 2, 1, 4, 6]解释:
StockSpanner stockSpanner = new StockSpanner();
stockSpanner.next(100); // 返回 1
stockSpanner.next(80);  // 返回 1
stockSpanner.next(60);  // 返回 1
stockSpanner.next(70);  // 返回 2
stockSpanner.next(60);  // 返回 1
stockSpanner.next(75);  // 返回 4 ,因为截至今天的最后 4 个股价 (包括今天的股价 75) 都小于或等于今天的股价。
stockSpanner.next(85);  // 返回 6

提示:

  • 1 <= price <= 105
  • 最多调用 next 方法 104 次


题解:
用单调栈求解。

栈的元素可以是股票价格的下标(即天数)和股票价格的二元数对,并且在栈中先插入一个最大值作为天数为 −1 天的价格,来保证栈不会为空。调用next时,先将栈中价格小于等于此时 price的元素都弹出,直到遇到一个大于 price 的值,并将 price 入栈,计算下标差返回。

code:

class StockSpanner {Deque<int[]> stack;int idx;public StockSpanner() {stack = new ArrayDeque<int[]>();idx = -1;stack.push(new int[]{idx, Integer.MAX_VALUE});}public int next(int price) {idx++;while (price >= stack.peek()[1]) {stack.pop();}int ret = idx - stack.peek()[0];stack.push(new int[]{idx, price});return ret;}
}

http://www.lryc.cn/news/184036.html

相关文章:

  • JavaScript中的模块化编程,包括CommonJS和ES6模块的区别。
  • 从零开始 Spring Cloud 13:分布式事务
  • 2023Node.js零基础教程(小白友好型),nodejs新手到高手,(二)NodeJS入门——buffer模块、计算机基础、fs模块、path模块
  • lua如何调用C/C++
  • 简单聊一聊公平锁和非公平锁,parallel并行流
  • 【SpringCloud】微服务技术栈入门4 - RabbitMQ初探
  • cefsharp(117.2.20)cef117.2.2最新体验版
  • layui在上传图片在前端处理图片压缩
  • js 事件参考
  • 卷积网络的发展历史-LeNet
  • (2023,GPT-4V,LLM,LMM,功能和应用)大型多模态模型的黎明:GPT-4V(ision) 的初步探索
  • 【C++设计模式之装饰模式:结构型】分析及示例
  • 绘制散点图、曲线图、折线图和环形图失败, 设置迭代次数和进度无法保存图片
  • micro-ROS中对消息的内存管理
  • Springboot中使用拦截器、过滤器、监听器
  • 代码随想录二刷day45
  • 泊车功能专题介绍 ———— AVP系统基础数据交互内容
  • 蓝桥杯每日一题2023.10.6
  • 7、【Qlib】【主要组件】Data Layer:数据框架与使用
  • Kubernetes安装部署 1
  • 在VS Code中优雅地编辑csv文件
  • LCR 128.库存管理 I
  • eigen::Affine3d 转换
  • 【Python从入门到进阶】38、selenium关于Chrome handless的基本使用
  • 给Python项目创建一个虚拟环境(enev)
  • 【RK3588】YOLO V5在瑞芯微板子上部署问题记录汇总
  • 别人做的百度百科词条信息不全,如何更正自己的百度百科词条
  • [论文精读]U-Net: Convolutional Networks for BiomedicalImage Segmentation
  • Godot Identifier “File“ not declared in the current scope.
  • Java ORM Bee,多表关联更新