返回
如何轻松解决LeetCode 121:买卖股票的最佳时机, JavaScript 实战指南
前端
2023-12-21 03:23:50
算法概述
我们的算法基于动态规划的思想,它将问题分解成更小的子问题,然后逐一解决。对于LeetCode 121,我们可以将问题分解成这样:
- 在第i天,如果我选择买入股票,那么我的最大利润是多少?
- 在第i天,如果我选择卖出股票,那么我的最大利润是多少?
我们使用变量buy
和sell
来分别记录这两个值。初始时,buy
被设置为负无穷大,sell
被设置为0。
算法流程
-
初始化变量:
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;
代码实现
/**
* 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:买卖股票的最佳时机。我们使用了一种巧妙的策略,只需要遍历数组一次,即可找到最佳的买卖时机,从而实现最大的利润。这种策略基于动态规划的思想,将问题分解成更小的子问题,然后逐一解决。希望本文对您有所帮助。