题目描述
方法1: 一次遍历
-
遍历一遍数组,计算每次 到当天为止 的最小股票价格和最大利润
- 代码
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 方法1
minPrice = float('inf') # 最低的股票价格先设置为 无穷小
maxprofit = 0
for price in prices:
minPrice = min(minPrice,price) # 更新最低价格?
maxprofit = max(maxprofit,price-minPrice) # 更新最大利润?
return maxprofit
方法2: 动态规划
-
遍历一遍数组,计算每次 到当天为止 的最小股票价格和最大利润
- 代码
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 方法2
n = len(prices)
if n==0: return 0 # 边界条件
dp = [0] * n # dp[i] 表示第i天卖出的最大利润
minPrice = prices[0] # 初始条件
for i in range(1,n):
minPrice = min(minPrice,prices[i]) # 更新最低价格?
dp[i] = max(dp[i-1],prices[i]-minPrice) # 状态转移方程
return dp[-1] # 取dp数组的最后一个元素
- 动态规划做题步骤:
- 明确 dp(i) 应该表示什么;( 若为二维dp(i)(j) )
- 根据 dp(i)和 dp(i-1) 的关系得出状态转移方程;
- 确定初始条件,如 dp(0) 和边界条件;