一. 題目
題目
示例
二. 方法一: 暴力法
解題思路
解題**
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個鍊錶指標分別表示當前元...