返回

如何轻松解决LeetCode 121:买卖股票的最佳时机, JavaScript 实战指南

前端

算法概述

我们的算法基于动态规划的思想,它将问题分解成更小的子问题,然后逐一解决。对于LeetCode 121,我们可以将问题分解成这样:

  • 在第i天,如果我选择买入股票,那么我的最大利润是多少?
  • 在第i天,如果我选择卖出股票,那么我的最大利润是多少?

我们使用变量buysell来分别记录这两个值。初始时,buy被设置为负无穷大,sell被设置为0。

算法流程

  1. 初始化变量:

    let buy = -Infinity;
    let sell = 0;
    
  2. 遍历价格数组:

    for (let i = 0; i < prices.length; i++) {
    
  3. 计算当前最低价:

    buy = Math.min(buy, prices[i]);
    
  4. 计算当前利润:

    sell = Math.max(sell, prices[i] - buy);
    
  5. 返回最大利润:

    return sell;
    

代码实现

/**
 * LeetCode 121: 买卖股票的最佳时机
 *
 * @param {number[]} prices 股票价格数组
 * @return {number} 最大利润
 */
const maxProfit = (prices) => {
  // 初始化变量
  let buy = -Infinity;
  let sell = 0;

  // 遍历价格数组
  for (let i = 0; i < prices.length; i++) {
    // 计算当前最低价
    buy = Math.min(buy, prices[i]);

    // 计算当前利润
    sell = Math.max(sell, prices[i] - buy);
  }

  // 返回最大利润
  return sell;
};

算法分析

  • 时间复杂度: O(n),因为我们只遍历价格数组一次。
  • 空间复杂度: O(1),因为我们只使用了几个常量变量。

总结

本文介绍了如何使用JavaScript解决LeetCode 121:买卖股票的最佳时机。我们使用了一种巧妙的策略,只需要遍历数组一次,即可找到最佳的买卖时机,从而实现最大的利润。这种策略基于动态规划的思想,将问题分解成更小的子问题,然后逐一解决。希望本文对您有所帮助。