题目:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
关键思路:动态规划实现
分析题目: 前n天的最大收益 = max{前n-1天的最大收益,第n天的价格-前n-1天中的最小价格} 提取状态方程。
提取状态方程: MR(n) = max{MR(n-1), A(n) - minVal(n-1)}
注意: DP的思路跟我们直接暴力破解的思路不同,通常是Sn = An + Sn-1的思路,即以当前值结束的情况下,当前状态与前序状态 之间的关系。
解:
var maxProfit = function (prices) {
let maxReminder = 0;
// MR(n) = max{MR(n-1), A(n) - minVal(n-1)}
// 前n天的最大收益 = max{前n-1天的最大收益,第n天的价格-前n-1天中的最小价格}
let minVal = prices[0];
for (let i = 0; i < prices.length; i++) {
maxReminder = Math.max(maxReminder, prices[i] - minVal)
minVal = Math.min(minVal, prices[i])
}
return maxReminder
};
———— 前端、Javascript实现、算法、刷题、leetcode