题目为 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
思路同之前股票文章 买卖股票最佳时机
代码为
public int MaxProfit(int[] prices)
{
if (prices.Length <= 1)
{
return 0;
}
int n = prices.Length;
int[,,] dp = new int[n, 2, 2];
for (int j = 1; j <= 1; j++)
dp[0, j, 1] = -prices[0]; //base case
for (int i = 1; i < n; i++)
{
for (int j = 1; j <= 1; j++)
{
//可能是昨天持有今天卖出
dp[i, j, 0] = Math.Max(dp[i - 1, j, 0], dp[i - 1, j, 1] + prices[i]);
//可能是今天买入
dp[i, j, 1] = Math.Max(dp[i - 1, j, 1], dp[i - 1, j - 1, 0] - prices[i]);
}
}
return dp[n - 1, 1, 0];
}