LeetCode1475 商品折扣後的最終價格

2021-10-08 20:56:19 字數 1271 閱讀 9529

一. 題目

題目

示例

二. 方法一: 暴力法

解題思路

解題**

def

finalprices

(self, prices: list[

int])-

> list[

int]

: index =

0while index <

len(prices)

: right = index +

1while right <

len(prices)

:if prices[right]

<= prices[index]

: prices[index]

-= prices[right]

break

right +=

1 index +=

1return 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(

)return result

分析時間複雜度: o(n)

空間複雜度: o(n)

Leetcode 147 對鍊錶進行排序

對鍊錶進行插入排序。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 到了鍊...

LeetCode 147 鍊錶插入排序

插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除...

LeetCode 147 對鍊錶進行插入排序

插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。方法1 嚴格按照演算法說明,在原始列表中進行操作,利用4個鍊錶指標分別表示當前元...