
题目描述:
题解一:贪心
参考
情况一:
一直增长:[1,2,3,4,5] result=2-1+3-2+4-3+5-4=4 与第一天买入,最后一天卖出相同。
情况二:
一直下降:利润为0, 不存在一个i,prices[i]>prices[i-1]
情况三:
先增长再下降:[a b c] a-b增长,b-c下降,a-b段prices[i]-prices[i-1]的和与b-a相等。
情况四:
先下降再增长:[a b c] a-b下降,b-c增长,b-c段prices[i]-prices[i-1]的和与b-c相等。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
result = 0
for i in range(1,len(prices)):
if prices[i]>prices[i-1]:
result = result+prices[i]-prices[i-1]
return result
题解二:动态规划
1.dp[i][0]表示第i天不持有股票的收益,dp[i][1]表示第i天持有股票的收益,dp[0][0]初始化为0,dp[0][1]初始化为-prices[0],表示在第0天买入的收益。
2.dp[i][0]=max(前一天不持有股票的收益dp[i-1][0],前一天持有股票在第i天以prices[i]卖出)
dp[i][1]=max(前一天持有股票的收益dp[i][1],前一天不持有股票但在第i天以prices[i]买入)
3.返回dp[len(prices)-1][0],因为最后一天不能持有股票。
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
dp = [[0]*2 for i in range(n)]
dp[0][0] = 0
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])
dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i])
print(dp)
return dp[n-1][0]
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)