LeetCode 901 股票价格跨度[栈] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 901 股票价格跨度[栈] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
题目意思表述不清,其实就是让你找比当前日期股票报价高的第一个前日期之间的时间跨度,那么定义一个栈存储之前日期大的数的下标,定义一个数组存放已经遍历过的每日报价,这样每天来的价格和栈中比较,把栈顶对应元素小的全出栈,直到剩下的比自己大,返回二者日期比较,同时把当日的下标入栈,代码如下:

class StockSpanner 
public:
    int idx;
    // 记录所有入栈数据
    vector<int> nums;
    // 记录当前所剩最大序列的下标
    stack<int> s;
    StockSpanner() 
        idx = -1;
    
    
    int next(int price) 
        idx ++;
        // 不断弹出,直到栈顶元素大于 price,则栈顶元素为 price 的上一个更大元素
        while(!s.empty() && nums[s.top()] <= price) 
            s.pop();
        
        int res = s.empty() ? idx + 1 : idx - s.top();
        s.push(idx);
        nums.emplace_back(price);
        return res;
    
;

/**
 * Your StockSpanner object will be instantiated and called as such:
 * StockSpanner* obj = new StockSpanner();
 * int param_1 = obj->next(price);
 */

以上是关于LeetCode 901 股票价格跨度[栈] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

901. 股票价格跨度

LeetCode 0901. 股票价格跨度

数据结构与算法之深入解析“股票价格跨度”的求解思路与算法示例

面试题打卡——C++版

LeetCode:121.股票问题(简单)

LeetCode 2034. 股票价格波动