原题如下
题解
方法一
暴力法
/*
*@v7fgg
*执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
*内存消耗:40.1 MB, 在所有 Java 提交中击败了100.00%的用户
*2020年6月21日 15:06
*/
class Solution {
public int[] finalPrices(int[] prices) {
for(int i=0;i<prices.length-1;i++){
for(int j=i+1;j<prices.length;j++){
if(prices[j]<=prices[i]){
prices[i]-=prices[j];
break;
}
}
}
return prices;
}
}
方法二
栈
/*单调栈
*@v7fgg
*执行用时:5 ms, 在所有 Java 提交中击败了9.38%的用户
*内存消耗:40 MB, 在所有 Java 提交中击败了100.00%的用户
*2020年6月21日 15:34
*/
class Solution {
public int[] finalPrices(int[] prices) {
Stack<Integer> s=new Stack<>();
for(int i=0;i<prices.length;i++){
//能在栈里面呆着说明还没找到右边第一个比它小的
while(!s.isEmpty()&&prices[s.peek()]>=prices[i]){
prices[s.pop()]-=prices[i];
}
s.push(i);
}
return prices;
}
}