美文网首页
901. 股票价格跨度(Python)

901. 股票价格跨度(Python)

作者: 玖月晴 | 来源:发表于2021-03-16 11:10 被阅读0次

难度:★★★☆☆
类型:数组
方法:单调栈

题目

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。

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

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

示例:

输入:["StockSpanner","next","next","next","next","next","next","next"], [[],[100],[80],[60],[70],[60],[75],[85]]
输出:[null,1,1,1,2,1,4,6]
解释:
首先,初始化 S = StockSpanner(),然后:
S.next(100) 被调用并返回 1,
S.next(80) 被调用并返回 1,
S.next(60) 被调用并返回 1,
S.next(70) 被调用并返回 2,
S.next(60) 被调用并返回 1,
S.next(75) 被调用并返回 4,
S.next(85) 被调用并返回 6。

注意 (例如) S.next(75) 返回 4,因为截至今天的最后 4 个价格
(包括今天的价格 75) 小于或等于今天的价格。

提示:

调用 StockSpanner.next(int price) 时,将有 1 <= price <= 10^5。
每个测试用例最多可以调用 10000 次 StockSpanner.next。
在所有测试用例中,最多调用 150000 次 StockSpanner.next。
此问题的总时间限制减少了 50%。

解答

我们用单调栈来解决这个问题。

直接的思路是,我们把各个时刻股票价格入栈,从栈顶向栈底统计不超过当前股票价格的所有时刻价格的数目,以此作为当前股票的跨度返回。但是存在的问题是,这种暴力做法存在大量重复计算,因此很容易超过时间限制。因此,我们需要考虑新的思路。

准备一个栈(也就是代码中的self.stack,可以用列表实现),这里栈中存储的不是每个时刻的股票价格,而仅仅存储到当前时刻为止,单调递减的时刻及其跨度。因此每次计算时,仅仅在满足条件时将可以合并的股票价格对应的跨度相加即可。

class StockSpanner:
    def __init__(self):
        self.stack = []

    def next(self, price):
        span = 1
        while self.stack and self.stack[-1]["price"] <= price:
            span += self.stack.pop()["span"]
        self.stack.append({"price": price, "span": span})
        return span

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

相关文章

  • 901. 股票价格跨度(Python)

    难度:★★★☆☆类型:数组方法:单调栈 题目 力扣链接请移步本题传送门[https://leetcode-cn.c...

  • 901. 股票价格跨度

    题目: 编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。 今天股票价...

  • leetcode 901 股票价格跨度

    首先我用插入排序的思想,直接爆破,然后超时没找出来。 后来想了想,用个栈就能解决,里面放二维数组。保存最大的价格和...

  • 预测股票价格-使用python做数据分析

    股票价格 相关的 预测股票价格-使用python做数据分析 的 观看地址: https://www.quantin...

  • 栈-N901-股票价格跨度

    题目 概述:给定一个股票每日价格列表,返回股票价格的跨度:从当天开始往回数小于等于今天价格的最大连续日数(包括今天...

  • 《巴菲特的估值逻辑:20个估值案例》第三部分

    时间跨度:1989~2014年 时代背景:变化多端。1989~1999年期间,美国进入了全面但短暂的衰退。股票价格...

  • 20221013 专业英语9

    901. preheat/ preheating 预热 902. protective gloves 劳保手套 9...

  • 跨度(A)

    隐身母体, 脐带向全社会低调证明我与素未谋面的妈妈之间存在着血缘关系; 少年顽皮, 叔叔常用男高音呼唤我回家吃饭让...

  • 跨度

    跨度 时间的跨度 一次遇见和告别 短的两三行情书 毕竟从南到北 走过太多四季 片刻欢愉

  • 跨度

    …缘与故 记忆中的平凡 去年的年夜饭特别酸,酸不重要,重要的是跟谁吃,关键是吃的舒心,踏实!常年在外忙乎,一...

网友评论

      本文标题:901. 股票价格跨度(Python)

      本文链接:https://www.haomeiwen.com/subject/igldfltx.html