【力扣】单调栈:901. 股票价格跨度

【力扣】单调栈:901. 股票价格跨度

文章目录

  • 【力扣】单调栈:901. 股票价格跨度
    • 1. 题目介绍
    • 2. 思路
    • 3. 解题代码
    • 参考

1. 题目介绍

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

  • 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
  • 例如,如果未来 7 天股票的价格是 [100,80,60,70,60,75,85],那么股票跨度将是 [1,1,1,2,1,4,6] 。

代码实现 StockSpanner 类:

  • StockSpanner() 初始化类对象。

  • int next(int price) 给出今天的股价 price ,返回该股票当日价格的 跨度 。

  • 示例:
    在这里插入图片描述

2. 思路

调用 next 时,

  • 输入是新的一天的股票价格,
  • 需要返回包含此日在内的,往前数最多有连续多少日的股票价格是小于等于今日股票价格的个数。

如果把每日的 price 当成数组不同下标的值,即需要求出每个值与上一个更大元素之间的下标之差。这种题目可以用单调栈求解,具体原理如下:

  • 单调栈是一种和单调队列类似的数据结构。
    • 单调队列主要用于解决滑动窗口问题,
    • 单调栈则主要用于解决NGE问题(Next Greater Element),也就是,对序列中每个元素,找到下一个比它大的元素。(当然,“下一个”可以换成“上一个”,“比它大”也可以换成“比他小”,原理不变。)
  • 这比单调队列还简单一点。
    • 我们维护一个栈,表示“待确定NGE的元素”,然后遍历序列。
    • 当我们碰上一个新元素,我们知道,越靠近栈顶的元素离新元素位置越近。
    • 所以不断比较新元素与栈顶,如果新元素比栈顶大,则可断定新元素就是栈顶的NGE,于是弹出栈顶并继续比较。直到新元素不比栈顶大,再将新元素压入栈。显然,这样形成的栈是单调递减的。

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

3. 解题代码

class StockSpanner {
private:stack<pair<int, int>> stackp; int ts;
public:StockSpanner() {this->stackp.emplace(0, INT_MAX);this->ts = 0;}int next(int price) {ts++;while (price >= stackp.top().second) {stackp.pop();	// 出栈}int res = ts - stackp.top().first;stackp.emplace(ts, price);	// 入栈return res;}
};

参考

【1】https://leetcode.cn/problems/online-stock-span/

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

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

相关文章

PicGo+Gitee+Typora搭建云图床

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

数据结构 堆——详细动画图解,形象理解

作者主页 &#x1f4da;lovewold少个r博客主页 ​➡️栈和队列博客传送门 &#x1f333;参天大树充满生命力&#xff0c;其根深叶茂&#xff0c;分枝扶疏&#xff0c;为我们展示了数据分治的生动形态 目录 &#x1f333; 树 树的常见概念 &#x1f4d2;树的表示 二叉树 一…

探索乡村新风貌:VR全景记录乡村发展,助力乡村振兴

引言&#xff1a; 中国乡村正经历着巨大变革&#xff0c;长期以来&#xff0c;乡村地区一直面临着人口外流、资源匮乏等问题。然而&#xff0c;近年来&#xff0c;政府的政策支持以及新兴技术的崭露头角&#xff0c;如虚拟现实&#xff08;VR&#xff09;全景记录&#xff0c;…

docker版jxTMS使用指南:4.6版升级内容

4.6版jxTMS已经发布&#xff0c;升级了多个重大能力&#xff0c;本系列文章将逐一进行讲解。 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查看&#xff1a;4.0版升级内容 4.2版jxTMS的说明&#xff0c;请查看&…

随着 ChatGPT 凭借 GPT-4V(ision) 获得关注,多模态 AI 不断发展

原创 | 文 BFT机器人 在不断努力让人工智能更像人类的过程中&#xff0c;OpenAI的GPT模型不断突破界限GPT-4现在能够接受文本和图像的提示。 生成式人工智能中的多模态表示模型根据输入生成文本、图像或音频等各种输出的能力。这些模型经过特定数据的训练&#xff0c;学习底层模…

【photoshop学习】用 Photoshop 做的 15 件创意事

用 Photoshop 做的 15 件创意事 每个人总是谈论 Photoshop 的无限可能。您可以使用该程序做很多事情&#xff0c;列表几乎是无穷无尽的。 嘿&#xff0c;我是卡拉&#xff01;如果您花过一些时间使用 在线ps&#xff0c;您可能见过我&#xff08;并且注意到我提到了这一点&am…

离散优化算法和连续优化算法

主要记录两个问题&#xff1a;第一&#xff0c;离散优化算法和连续优化算法的区别与联系&#xff1b;第二&#xff0c;哪些算法是离散优化算法&#xff0c;哪些算法是连续优化算法&#xff1f; 问题1&#xff1a;离散优化算法和连续优化算法的区别与联系是什么&#xff1f; 离…

WPF向Avalonia迁移(四、其他事项)

开发必备 1. Avalonia项目源代码&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;没有源代码&#xff0c;你连控件的背景色怎么改都找不着&#xff01;&#xff01; 2.下载你所使用的版本&#x…

【AI视野·今日Robot 机器人论文速览 第五十一期】Tue, 10 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 10 Oct 2023 Totally 54 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers On Multi-Fidelity Impedance Tuning for Human-Robot Cooperative Manipulation Authors Ethan Lau, Vaibhav Srivastava, Sh…

【Proteus仿真】【STM32单片机】汽车倒车报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、按键、继电器电机模块、DS18B20温度传感器、蜂鸣器LED、HCSR04超声波等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显…

jmeter 请求发送加密参数

最近在做http加密接口&#xff0c;请求头的uid参数及body的请求json参数都经过加密再发送请求&#xff0c;加密方式为&#xff1a;ase256。所以&#xff0c;jmeter发送请求前也需要对uid及json参数进行加密。我这里是让开发写了个加密、解密的jar&#xff0c;jmeter直接调用这个…

解决git push时每次需要输入用户名和密码方法

1、在git push时每次都要输入用户名和密码是一件很痛苦的事&#xff0c;其实解决方法很简单步骤如下&#xff1a; 在项目文件夹&#xff08;包含隐藏文件夹.git文件夹的&#xff09;内右键 git bash here在git bash交互环境输入命令 git config credential.helper store 2、这…

Tomcat项目启动报错

java.io.IOException: java.lang.ClassCastException: Cannot cast org.springframework.web.SpringServletContainerInitializer to javax.servlet.ServletContainerInitializer解决办法&#xff1a;可能Tomcat版本不对&#xff0c;使用7.0.90版本启动报错&#xff0c;使用8.0…

【VTK】一文讲解vtkImageActor

很高兴在雪易的CSDN见到你,给你糖糖 系列文章目录 VTK付费专栏_雪易的博客-CSDN博客 感谢订阅的小哥哥小姐姐,小易会继续努力分享,一起进步! 若订阅后有其它需求,欢迎随时联系,CSDN一直在线(^U^)ノ~YO 前言 本文主要讲解vtk的

flutter 常用组件:文本、图片和按钮

文章目录 文本控件富文本控件图片本地图片网络图片按钮文本控件 ##一’码’当先 Text(这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本,textAlign:TextAlign.center,style: TextStyle(fontWeight: FontWeight.bold, font…

【日常】一名开发人员总结的好习惯,欢迎补充

文章目录 前言首先需要考虑&#xff08;重要&#xff09;设计和架构代码质量测试和调试性能优化 编程的好习惯代码可读性模块化和重用性单一职责异常处理注释和文档常见的Java编码规范的例子下面是一个示例代码&#xff0c;展示了一些编码规范的应用还有一些其他的编码规范值得…

Ceph入门到精通-iptables 限制多个ip 的多个端口段访问

要使用iptables限制多个IP的多个端口范围的访问&#xff0c;可以使用以下命令&#xff1a; iptables -A INPUT -p tcp -m multiport --dports 端口段 -m iprange --src-range 起始IP-结束IP -j DROP上面的命令将添加一条规则到INPUT链中&#xff0c;该规则将禁止指定IP范围访问…

flutter 判断data是否是list类型,然后获取里面的值

///处理banner data_handlerBannerData(Response response) {if (response.code 0 || response.code 200) {List<BannerModel> list [];if (response.data is List) {//data本来是个对象的&#xff0c;后台返回了个数组&#xff0c;那就判断是否是列表(response.data …

基础架构开发-操作系统、编译器、云原生、嵌入式、ic

基础架构开发-操作系统、编译器、云原生、嵌入式、ic 操作系统编译器词法分析AST语法树生成语法优化生成机器码 云原生容器开发一般遇到的岗位描述RDMA、DPDK是什么东西NFV和VNF是什么RisingWave云原生存储引擎开发实践 单片机、嵌入式雷达路线规划 ic开发 操作系统 以C和Rust…

云原生Docker镜像管理

目录 Docker 概述 Docker是什么 Docker的设计宗旨 Docker的特性 Docker的特性 Docker与虚拟机的区别 容器在内核中支持2种重要技术 Linux 的namespace &#xff08;命名空间&#xff09; Docker核心概念 安装 Docker Docker 镜像操作 #搜索镜像 获取镜像 镜像加速下…