解题思路
此处撰写解题思路
记录一下dp的过程,并且还有一个更好的方法,只要 记录差值为正就加上的贪心算法
代码
class Solution:
def maxProfit(self, prices: List[int]) -> int:
"""
动归方程:
dp[i][k][1] = max(dp[i-1][k][1],dp[i-1][k-1][0] - price[i])
dp[i][k][0] = max(dp[i-1][k][0],dp[i-1][k][1] + price[i])
k 无穷:
dp[i][k][1] = max(dp[i-1][k][1],dp[i-1][k][0] - price[i])
dp[i][k][0] = max(dp[i-1][k][0],dp[i-1][k][1] + price[i])
不需要k:
dp[i][1] = max(dp[i-1][1],dp[i-1][0] - price[i])
dp[i][0] = max(dp[i-1][0],dp[i-1][1] + price[i])
"""
n = len(prices)
if n == 0: return 0
for i in range(0,n):
if i == 0:
dp_i_1 = -prices[i]
dp_i_0 = 0
else:
temp = dp_i_1
dp_i_1 = max(dp_i_1,dp_i_0 - prices[i])
dp_i_0 = max(dp_i_0,dp_i_1 + prices[i])
return dp_i_0
## 第二种: 思路很简单,只要连续的两天,操作能赚钱,那么我就进行操作。即买卖一次
class Solution:
def maxProfit(self, prices: List[int]) -> int:
ans = 0
for i in range(1, len(prices)):
if prices[i] > prices[i-1]:
ans += prices[i] - prices[i-1]
return ans