输入关键字股票,出来的题目如下:
剑指 Offer 63. 股票的最大利润
一次买卖,不求代码NB,只求解题,用动态规划:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
if n == 0 or n == 1:
return 0
dp = [[0,0]for i in range(n)]
# 0 表示没有持有,1 表示持有
dp[0][1] = -prices[0]
for i in range(1,n):
# 没有持有,从上一个没有持有,或者,上一个持有的卖掉
dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i])
# 持有,从上一个持有,或者,从没有持有的状态买入,注意这里是直接为-prices[i],因为只能操作一次
dp[i][1] = max(dp[i-1][1],-prices[i])
return dp[n-1][0]
只求能过。
在这个基础上去考虑无限次操作的也是一样的。比如题目:
122. 买卖股票的最佳时机 II
代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
if n == 0 or n == 1:
return 0
dp = [[0,0] for i in range(n)]
dp