其他分享
首页 > 其他分享> > 1852. 最终优惠价(单调栈)

1852. 最终优惠价(单调栈)

作者:互联网

1852. 最终优惠价

中文English

一位店主需要完成一项销售任务,他将要出售的物品排成一排。
从左侧开始,店主以其全价减去位于该物品右侧的第一个价格较低或价格相同的商品的价格。
如果右侧没有价格低于或等于当前商品价格的商品,则以全价出售当前商品。
你需要返回每一个物品实际售出价格。

样例

示例 1:
输入:
Prices = [2, 3, 1, 2, 4, 2]
输出: [1, 2, 1, 0, 2, 2]
解释:第0个和第1个物品右边第一个更低的价格都是1,所以实际售价需要在全价上减去1, 第3个物品右边第一个更低的价格是2,所以实际售价要在全价上面减去2。 
示例 2:
输入:
Prices = [1, 2, 3, 4, 5]
输出: [1, 2, 3, 4, 5]
解释: 每一个物品都保持原价,他们的右边都没有等于或者更低价格的物品

注意事项

    输入测试数据 (每行一个参数)如何理解测试数据?

 第一个版本:

class Solution:
    """
    @param prices: a list of integer
    @return: return the actual prices
    """
    """
    大致思路:单调栈
    1.从右边开始往左边循环,依次放入栈里面,如果当前值 >= 栈右边第一个,则减去即可。如果当前值 < 栈右边第一个,则栈右边第一个pop掉,一直到符合条件的时候为止
    2.每次取出,写入res里面,最终返回res
    """
    def FinalDiscountedPrice(self, prices):
        # write your code here
        if len(prices) == 0:return 0 
        
        #初始化
        res,d = [prices[-1]],[prices[-1]]

        l = len(prices)
        for i in range(l - 2, -1,-1):
            if prices[i] >= d[0]:
                res.insert(0,prices[i] - d[0])
                d.insert(0,prices[i])
            else:
                while d != [] and prices[i] < d[0]:
                    d.pop(0)

                if d != []:
                    res.insert(0,prices[i] - d[0])
                else:
                    res.insert(0,prices[i])
                d.insert(0,prices[i])
    
        return res

 

标签:insert,右边,return,res,1852,优惠价,物品,prices,单调
来源: https://www.cnblogs.com/yunxintryyoubest/p/13113813.html