问题描述:
- 给定一个数组
prices
,其中 prices[i]
是商店里第 i
件商品的价格。
- 商店里正在进行促销活动,如果你要买第
i
件商品,那么你可以得到与 prices[j]
相等的折扣,其中 j
是满足 j > i
且 prices[j] <= prices[i]
的最小下标,如果没有满足条件的 j
,你将没有任何折扣。 - 返回一个数组,数组中第
i
个元素是折扣后你购买商品 i
最终需要支付的价格。
核心思路:
- 标准单调栈问题,单调栈找到数组中下一个更小值即可。
代码实现:
class Solution
{
public:
vector<int> finalPrices(vector<int>& prices)
{
int m = prices.size();
stack<int> stk;
vector<int> ans(m);
for(int i = 0; i < m; ++i)
{
ans[i] = prices[i];
while(!stk.empty() and prices[stk.top()] >= prices[i])
{
ans[stk.top()] = prices[stk.top()] - prices[i];
stk.pop();
}
stk.push(i);
}
return ans;
}
};