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

每日一道leetcode(增加版)

901. 股票价格跨度 - 力扣(LeetCode)

题目

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

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

  • 例如,如果未来 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. 和上一个单调栈的问题也很类似,维护一个保存价格和跨度的栈,当栈为空或者price小于栈顶元素的价格时,入栈并返回1;
  2. 反之如果栈顶不为空且price大于栈顶元素的价格时,那么就不断弹栈将栈顶元素的跨度加起来,最后达到终止条件后再加上本身的1作为最终跨度,然后将此跨度入栈并返回跨度。

代码实现

class StockSpanner {
public:vector<pair<int, int>> stock_days;StockSpanner() {}int next(int price) {if(stock_days.empty()) {stock_days.push_back(make_pair(price, 1));return 1;}else {int day = 1;while(!stock_days.empty() && price >= (stock_days.back()).first) {day += (stock_days.back()).second;stock_days.pop_back();}stock_days.push_back(make_pair(price, day));return day;}}
};/*** Your StockSpanner object will be instantiated and called as such:* StockSpanner* obj = new StockSpanner();* int param_1 = obj->next(price);*/

复杂度分析

  • 时间复杂度:next操作的时间复杂度最坏为O(n)。
  • 空间复杂度:O(n)。
http://www.lryc.cn/news/2380310.html

相关文章:

  • 数字信号处理-大实验1.1
  • Java大厂求职面试:探讨Spring Boot与微服务架构
  • SAP ABAP 中驼峰字段名转 JSON 的实现方案
  • 对抗性机器学习:AI模型安全防护新挑战
  • [[春秋云境] Privilege仿真场景
  • Redis学习打卡-Day3-分布式ID生成策略、分布式锁
  • 计算机网络:怎么理解调制解调器的数字调制技术?
  • 数据库第二次作业--SQL的单表查询与多表查询
  • 在Cursor中启用WebStorm/IntelliJ风格快捷键
  • vue3:十三、分类管理-表格--编辑、新增、详情、刷新
  • c#基础01(.Net介绍)
  • Go语言之路————并发
  • Logrotate:配置日志轮转、高效管理Linux日志文件
  • 贵州某建筑物挡墙自动化监测
  • nginx服务器实验
  • 【算法】滑动窗口动态查找不含重复字符的最长子串
  • 高速光耦在通信行业的应用(五) | 5Mbps通信光耦的特性
  • Apidog MCP服务器,连接API规范和AI编码助手的桥梁
  • 视觉模型部署实践:低算力平台RV1106上高效部署paddlepaddle 的PicoDet目标检测模型的技术实践
  • 07、基础入门-SpringBoot-自动配置特性
  • 国内MCP服务平台推荐 AIbase推出MCP服务器客户端商店
  • Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!
  • Elasticsearch 初步认识
  • 爬虫攻防战:从入门到放弃的完整对抗史与实战解决方案
  • 可变参数(Variadic Functions)- 《Go语言实战指南》
  • [ctfshow web入门] web75
  • 交流学习 | 江西同为科技有限公司赴海尔总部考察交流
  • React方向:react的基本语法-数据渲染
  • Java求职面试:从核心技术到大数据与AI的场景应用
  • Ubuntu 20.04之Docker安装ES7.17.14和Kibana7.17.14