1
0
mirror of https://github.com/SunnyQjm/algorithm-review.git synced 2026-06-05 15:39:29 +08:00

add: dijkstra

This commit is contained in:
2020-06-27 09:07:35 +08:00
parent a798d3272b
commit 99631c82e9
15 changed files with 77 additions and 39 deletions
-1
View File
@@ -45,7 +45,6 @@ class Solution:
for j in range(n - 2, -1, -1):
grid[m - 1][j] += grid[m - 1][j + 1]
for i in range(m - 2, -1, -1):
for j in range(n - 2, -1, -1):
grid[i][j] += min(grid[i + 1][j], grid[i][j + 1])
@@ -42,9 +42,9 @@ class Solution:
- maxV => 在反向遍历过程中,记录的已遍历部分的最高价格
- 状态转移方程:
dp[i] = 0 i == n - 1
= max(dp[i + 1], max - prices[i]) i < n - 1
= max(dp[i + 1], maxV - prices[i]) i < n - 1
2. 接着进行正向遍历, 计算[0:i]范围内完成一次交易最多可得多少收益:
- min => 记录在正向遍历过程中,已遍历部分的最低价格
- minV => 记录在正向遍历过程中,已遍历部分的最低价格
- last => 记录[0:i-1]范围内完成一次交易最多可得多少收益
- 状态转移方程:
cur = 0 i == 0
@@ -67,12 +67,12 @@ class Solution:
maxV = prices[i]
# 正向遍历初始化
last, min, result = 0, prices[0], 0
last, minV, result = 0, prices[0], 0
for i in range(1, len(prices)):
cur = max(last, prices[i] - min)
cur = max(last, prices[i] - minV)
last, result = cur, max(result, cur + dp[i + 1])
if prices[i] < min:
min = prices[i]
if prices[i] < minV:
minV = prices[i]
return result