力扣75——单调栈

news/2024/11/21 1:26:20/

总结leetcode75中的单调栈算法题解题思路。
上一篇:力扣75——区间集合

力扣75——单调栈

  • 1 每日温度
  • 2 股票价格跨度
  • 1 - 2 解题总结

1 每日温度

题目:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中
answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都
不会升高,请在该位置用 0 来代替。

题解:
单调栈。
进出栈策略:for循环遍历,对于当前的气温,先跟栈顶比较,如果大于栈顶,则计算栈顶与当前的天数间隔,并出栈,然后继续比较直到不大于,最后将当前气温的日期进栈

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n = temperatures.size();vector<int> ans(n);stack<int> s;for (int i = 0; i < n; ++i) {while (!s.empty() && temperatures[i] > temperatures[s.top()]) {int previousIndex = s.top();ans[previousIndex] = i - previousIndex;s.pop();}s.push(i);}return ans;}
};

2 股票价格跨度

题目:

设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始
往回数,包括今天)。例如,如果未来 7 天股票的价格是 [100,80,60,70,60,75,85],那么股票跨度将是
[1,1,1,2,1,4,6] 。实现 StockSpanner 类:StockSpanner() 初始化类对象。
int next(int price) 给出今天的股价 price ,返回该股票当日价格的跨度。

题解:
单调栈。
进出栈策略:先把一个非常大的数压入栈中,然后for循环遍历。对于当天的股价,先跟栈顶比较,如果大于等雨栈顶,则计算栈顶与当前的天数间隔,并出栈,然后继续比较直到小于最后将当前股价及其日期进栈

class StockSpanner {
public:StockSpanner() {this->stk.emplace(-1, INT_MAX);this->idx = -1;}int next(int price) {idx++;while (price >= stk.top().second) {stk.pop();}int ret = idx - stk.top().first;stk.emplace(idx, price);return ret;}private:stack<pair<int, int>> stk; int idx;
};

1 - 2 解题总结

问题特点1:每个数据都有时间戳、数据间有大小差异。
问题特点2:向后查找,对于某个时间节点的数据,查找其与之后的第几个数据满足某个比较条件;向前查找,对于某个时间节点的数据,查找其与之前的第几个数据满足某个比较条件。
向后查找:由于遍历时,还未知道后面的数据,所以当前数据只是用来计算前面的数据的结果,然后它再进栈。
向前查找:由于遍历时,已经知道当前的数据,所以当前数据是可以得到结果的,至于当前数据是否需要进栈,则需要根据题目具体要求进行判断。


http://www.ppmy.cn/news/1044124.html

相关文章

「UG/NX」Block UI 面收集器FaceCollector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

Codeforces Round 153 (Rated for Div. 2)

目录 A. Not a Substring 题目&#xff1a; 解析&#xff1a; B. Fancy Coins 题目&#xff1a; 解析&#xff1a; C. Game on Permutation 题目&#xff1a; 解析&#xff1a; A. Not a Substring 题目&#xff1a; A bracket sequence is a string consisting of ch…

2023全网Mysql 合集(25w字)附课程 从安装到高级,实战

mysql学习 1.安装mysql 安装教程 2.mysql的详细学习教程 mysql的详细教程 3.mysql 的高级优化 MySQL高级篇&#xff08;SQL优化、索引优化、锁机制、主从复制&#xff09; 4.MySQL 面试 MySQL数据库面试题总结 二.mysql实战 一、创建数据表并插入数据 1、学生表 Stud…

LeetCode450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 文章目录 [450. 删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)一、题目二、题解方法一&#xff1a;递归&#xff08;一种麻烦的方法&#xff09;方法二&#xff1a;优化后的递归 一、题目 给定一个二叉搜索树的根…

ZZULIOJ 1193: 单科成绩排序(结构体专题),Java

ZZULIOJ 1193: 单科成绩排序&#xff08;结构体专题&#xff09;&#xff0c;Java 题目描述 有一学生成绩表&#xff0c;包括学号、姓名、3门课程成绩。请按要求排序输出&#xff1a;若输入1&#xff0c;则按第1门课成绩降序输出成绩表&#xff0c;若输入为i&#xff08;1<…

VS2015打开Qt的pro项目文件 报错

QT报错&#xff1a;Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set 解决方法&#xff1a; 找到本机安装的QT路径&#xff0c;找到“msvc-version.conf”文件&#xff0c;用记事本打开&#xff0c; 在其中添加版本“QMAKE_MSC_VER 1900”保存即可。 …

React Native 环境搭建

本文以 Android 开发环境&#xff08;MacBook&#xff0c;已安装 JDK、SDK、Android Studio &#xff09;为基础而进行 React Native 环境搭建&#xff0c;iOS 环境类似&#xff0c;可参考搭建。 1、安装 Homebrew 命令&#xff1a; ruby -e "$(curl -fsSL https://raw…

TypeScript2

继承接口 如果两个接口之间有相同的属性或方法&#xff0c;可以将公共的属性或方法抽离出来&#xff0c;通过继承来实现复用比如&#xff0c;这两个接口都有 x、y 两个属性&#xff0c;重复写两次&#xff0c;可以&#xff0c;但很繁琐 &#xff0c;直接继承就不用写了 例子&…