11. 买卖股票的最佳时机【CL121】

113 阅读1分钟

题目:

给定一个数组 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