栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 商品折扣后的最终价格(leetcode)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 商品折扣后的最终价格(leetcode)

给你一个数组prices,其中prices[i] 是商店里第i件商品的价格。商店里正在进行促销活动,如果
你要买第i件商品,那么你可以得到与prices[j]相等的折扣,其中j是满足j > i且prices[j] <= prices[i]
的最小下标,如果没有满足条件的j,你将没有任何折扣。
请你返回一个数组,数组中第i个元素是折扣后你购买商品i最终需要支付的价格。

解法一

  • 思路遍历找到该数,然后减去折扣。
    代码如下:
class Solution:
    def finalPrices(self, prices):
        res = []
        length = len(prices)
        for i in range(length):
            for j in range(i + 1, length):
                if prices[j] <= prices[i]:
                    res.append(j)
                    break
            else:
                res.append(-1)
        return [prices[i] - (prices[res[i]] if res[i] != -1 else 0) for i in range(length)]

解法二

  • 利用栈的单调性
class Solution01:
    def finalPrices(self, prices):
        lessNum = {}
        length, stack = len(prices), []
        for index, num in enumerate(prices):
            # 栈是单调递减的
            while stack and stack[-1][1] >= num:  # [][1] 取到的是值。栈顶的元素遇到了比自己小的第一个数,
                lessNum[stack.pop()] = num # 记录当前的数,并且弹出栈
            # 当前数比栈顶的数大,入栈,所以栈就保持了单调递减
            stack.append((index, num))
        return [num - lessNum.get((index, num), 0) for index, num in enumerate(prices)]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/488534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号