解题思路:
刚看到这道题的时候不知道如何下手,如果用暴力的方法时间复杂度太高,并且会进行很多重复操作,但是利用栈的形式可以很好化解这样的问题,可以设计这样一个栈,栈顶遇到小的就弹出,不断弹出直到没有比要进入的数还大的数,这能保证栈中的元素右边的元素都是比自身大的数,这样一次遍历就可以把所有的商品价格都更新,代码如下:
class Solution {
public:
vector<int> finalPrices(vector<int>& prices) {
int n = prices.size();
stack<int> s;
for(int i = 0; i < n; i ++) {
if(s.empty()) {
s.push(i);
} else {
while(!s.empty() && prices[s.top()] >= prices[i]) {
prices[s.top()] -= prices[i];
s.pop();
}
s.push(i);
}
}
return prices;
}
};