买卖股票的最佳时机
力扣题目链接
dp数组含义:
dp[i][0]: 持有股票的最大收益
dp[i][1]:不持有股票的最大收益
状态转移方程:
dp[i][0]=max(dp[i-1][0],-price[i])// 状态与前一个状态一致, 或在第i天买入这个股票
dp[i][1]=max(dp[i-1][1],dp[i][0]+price[i])//状态与前一个状态一致, 或在第i天卖出这个股票
初始化;
dp[0][0]=-price[i]
dp[1][1]=0
遍历顺序:正序。
var maxProfit = function(prices) {
let dp=new Array(prices.length).fill(0).map(()=>
new Array(2).fill(0)
)
dp[0][0]=-prices[0]
dp[0][1]=0
for(let i=1;i<prices.length;i++){
dp[i][0]=Math.max(dp[i-1][0],-prices[i])
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]+prices[i])
}
return dp[prices.length-1][1]
};
买卖股票的最佳时机II
力扣题目链接
与上题区别:可以买卖多次股票
递推公式变为:
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]-prices[i]) //体现在dp[i-1][1]-prices[i]
var maxProfit = function(prices) {
let dp=new Array(prices.length).fill(0).map(()=>
new Array(2).fill(0)
)
dp[0][0]=-prices[0]
dp[0][1]=0
for(let i=1;i<prices.length;i++){
dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]-prices[i])
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]+prices[i])
}
return dp[prices.length-1][1]
};