一. 题目
-
题目
-
示例
二. 方法一: 暴力法
-
解题思路
-
解题代码
def finalPrices(self, prices: List[int]) -> List[int]: index = 0 while index < len(prices): right = index + 1 while right < len(prices): if prices[right] <= prices[index]: prices[index] -= prices[right] break right += 1 index += 1 return prices
-
分析
时间复杂度: O(n^2)
空间复杂度: O(1)
三. 方法二: 单调栈
-
解题思路
-
解题代码
def finalPrices(self, prices: List[int]) -> List[int]: # stack为单调栈 stack = [] result = [_ for _ in prices] # 遍历原列表, for index in range(len(prices)): # 如果stack不为空, 且栈顶元素大于等于待入栈元素 while stack and prices[index] <= prices[stack[-1]]: result[stack[-1]] -= prices[index] # 弹出栈顶元素 stack.pop() stack.append(index) return result
-
分析
时间复杂度: O(n)
空间复杂度: O(n)