每日力扣-股票价格跨度

167 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

每日力扣是一个专门用来讲力扣中国每天发布的每日一题的栏目。本专栏不提供题目的解答源码,只讲解思路,目的是养成每日刷题、提高自己手感,从而达到算法熟练的目标。

题目(已做删减处理)

编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。 今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]

分析

一道简单的堆栈题目。从题目中的描述,我们可以知道只有股票趋势是下降时,才会统计跨度日期。那么我们可以使用堆栈这种数据结构来计算跨度日期。那么我们进一步,可以得到以下3种情况:

  • 如果堆栈的数据为空,即第一次入栈的时候,那么没有任何的条件,直接入栈即可;
  • 如果堆栈的顶层元素大于当前的元素,即股票的趋势是上升时,我们直接入栈即可;
  • 如果堆栈的顶层元素小于或者等于当前的元素,此刻就需要将栈顶元素出栈,然后将出栈时候的数据增肌到当前的数据中,同时再次对比出栈后的堆栈中的栈顶元素,如果大于当前元素,直接入栈即可。

总结

一道很有意思的算法题。事实上,这种算法题更倾向于叫程序设计题。如果你一直刷力扣,那么最具代表性的肯定是使用堆栈表示队列的程序设计题。这种题目和普通的算法题目不同,它更多考察的是同学们的逻辑思维能力、程序设计能力。对于日常的工作评估来说,具有一定的代表性。

image.png

解题证明