题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个商品价格列表,现在每个价格可以拥有优惠,即减去该商品之后最近的那个价格不大于自身的商品价格。求折扣后的商品价格列表。

思路分享

  • 对于每个元素查找下一个比自己小的元素,很自然就想到可以用单调栈来处理,以参考题解的从左往右为例。

  • 只要在栈内存储比较大的,还没找到下个比自己小的元素,然后遍历新元素时,检查栈顶是否比自己大,是的情况就弹栈处理优惠,否则就直接压栈。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
class Solution:
def finalPrices(self, prices: List[int]) -> List[int]:
stk = []
ans = prices[:]
for i, x in enumerate(prices):
while stk and x <= prices[stk[-1]]:
ans[stk.pop()] -= x
stk.append(i)
return ans