Menu
CoddyTech

Stock Span Problem

中等单调栈python iconjava iconcpp iconc iconjs icon+10

你会得到某只股票每天的收盘价:prices[i] 表示第 i 天的价格。第 i 天的跨度,是以第 i 天结束并包含当天的连续天数,在这些天里,价格都小于或等于 prices[i]。

按与 prices 相同的顺序,返回每天的跨度。每个跨度至少为 1,因为一天总会计入自身。

函数

stockSpan(prices: integer-array) → integer-array
pricesinteger-array
按顺序列出每天的价格
返回值integer-array
每天的范围,顺序相同

约束条件

  • 1 ≤ prices.length ≤ 104
  • 1 ≤ prices[i] ≤ 105
  • 价格相同的更早日期也计入跨度;只有严格高于当前价格的价格才会使跨度停止。

示例

输入
prices = [31, 27, 14, 21, 30, 18, 40]
输出
[1, 1, 1, 2, 4, 1, 7]
解释
第 3 天的 21 回溯到 14,并在 27 处停止:跨度为 2。第 4 天的 30 在 31 处停止:跨度为 4。第 6 天的 40 高于之前的所有价格,覆盖全部 7 天。
challenge icon

进阶

现在价格会一次到达一个,你必须在每个价格到达时报告对应的区间。哪种方法仍然有效?它会在多次调用之间保留什么?

重置代码
def stockSpan(prices):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

prices = [31, 27, 14, 21, 30, 18, 40]

预期输出

[1, 1, 1, 2, 4, 1, 7]