目录
1,题目
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
2,代码
动态规划
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
const n = prices.length;
if(n === 0){
return 0;
}
const dp = new Array(n).fill(0).map(v=>Array(2).fill(0));
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(let i = 1; i<n ; i++){
dp[i][0] = Math.max(dp[i-1][1] + prices[i],dp[i-1][0]);
dp[i][1] = Math.max(dp[i-1][0] - prices[i],dp[i-1][1]);
}
return dp[n-1][0];
};
3,回顾与总结
3.1解题思路回顾
(1)定义状态
dp[i][0]表示第i天交易完成后手里没有股票的最大利润;
dp[i][1]表示第i天交易完成后手里持有一支股票的最大利润;
(2)转移方程
dp[i][0]表示这一天手里没有股票,则
前一天手里也是没有股票的,即dp[i-1][0];或者前一天手里持有一只股票,今天要将其出售,即dp[i-1][1]-price[i];
dp[i][1]表示这一天手里持有一支股票,则
前一天手里就持有该股票的,即dp[i-1][1];或者前一天手里没有股票,今天要进行购买,即dp[i-1][0]-price[i];
则有状态转移方程为:
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]}
3.2javascript中语法二维数组的创建
const dp = new Array(n).fill(0).map(v=>Array(2).fill(0));
3.3动态规划 状态变化的实现
for(let i = 1; i<n ; i++){
dp[i][0] = Math.max(dp[i-1][1] + prices[i],dp[i-1][0]);
dp[i][1] = Math.max(dp[i-1][0] - prices[i],dp[i-1][1]);
}
勉励自己:贵在坚持!
标签:股票,Days26,js,力扣,prices,Array,手里,dp,fill From: https://blog.csdn.net/m0_51666362/article/details/137014440