返回
独辟蹊径谈“买卖股票的最佳时机”:用代码详解动态规划
前端
2024-01-24 02:21:29
众所周知,把握时机对股票交易至关重要。想在股票市场上立足,我们不仅需要敏锐的洞察力,更需要掌握科学的方法。
今天,我们就把目光投向 LeetCode 经典题目:“买卖股票的最佳时机”。这道题旨在考验我们的动态规划能力,帮助我们用代码找到买入和卖出股票的最佳时机,从而最大化利润。
一、题目背景
给定一个数组 prices,其中 prices[i] 表示股票在第 i 天的价格。我们需要找到买入和卖出股票的最佳时机,使得利润最大化。注意,只能进行一次买入和卖出操作。
二、动态规划解析
这个问题的动态规划解法可以用一个一维数组 dp 来解决。其中,dp[i] 表示在第 i 天(包括第 i 天)之前,股票的最大利润。
我们从 dp[0] = 0 开始,然后依次计算每个 dp[i]。对于 dp[i],我们有两种选择:
- 不持有股票: 在这种情况下,dp[i] = dp[i-1]。
- 持有股票: 在这种情况下,dp[i] = max(dp[i-1], -prices[i] + max(dp[0], dp[1], ..., dp[i-1])。
三、代码实现
class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length <= 1) {
return 0;
}
int[] dp = new int[prices.length];
dp[0] = 0;
for (int i = 1; i < prices.length; i++) {
dp[i] = Math.max(dp[i-1], -prices[i] + findMax(dp, 0, i-1));
}
return dp[prices.length - 1];
}
private int findMax(int[] dp, int start, int end) {
int max = Integer.MIN_VALUE;
for (int i = start; i <= end; i++) {
max = Math.max(max, dp[i]);
}
return max;
}
}
四、总结
动态规划是一种强大的技术,可以帮助我们解决各种问题。通过将问题分解成子问题,我们能够逐步找到最优解。在“买卖股票的最佳时机”这道题中,我们使用动态规划巧妙地解决了这一难题,找到了最佳的买入和卖出时机。