股票最大化算法的索引越界
本文关键字:索引 越界 算法 最大化 | 更新日期: 2023-09-27 18:12:13
我把下面的代码尽可能从Java翻译成c#:
public double maxProfit(double[] prices, int K)
{
if (K == 0 || prices.Length == 0)
{
return 0;
}
var dp = new double[K + 1, prices.Length];
for (int i = 1; i < K + 1; i++)
{
double maxDiff = -prices[0];
for (int j = 1; j < prices.Length; j++)
{
dp[i, j] = Math.Max(dp[i, j - 1], prices[j] + maxDiff);
maxDiff = Math.Max(maxDiff, dp[i - 1, j] - prices[j]);
}
}
printTrans(dp, prices, K);
return dp[K, prices.Length - 1];
}
public void printTrans(double[,] dp, double[] prices, int K)
{
int i = K - 1;
int j = prices.Length;
var priceList = new List<double>();
while (true)
{
if (i == 0 || j == 0)
{
break;
}
if (dp[i, j] == dp[i, j - 1])
{
j = j - 1;
}
else
{
priceList.Add(j);
double maxDiff = dp[i, j] - prices[j];
for (int z = j - 1; z >= 0; z--)
{
if (dp[i - 1, z] - prices[z] == maxDiff)
{
i = i - 1;
j = z;
priceList.Add(j);
break;
}
}
}
}
while (priceList.Count > 0)
{
Console.WriteLine("Buy @ " + prices[priceList.IndexOf(0)]);
Console.WriteLine("Sell @ " + prices[priceList.IndexOf(0)]);
}
}
第二个方法出现错误if (dp[i, j] == dp[i, j - 1])
和
for (int z = j - 1; z >= 0; z--)
{
if (dp[i - 1, z] - prices[z] == maxDiff)
我得到一个Index was outside the bounds of the array
。错误。我明白这个错误意味着什么,但我对我的修复它没有线索。我花了相当多的时间来理解这段代码的第一部分,但对于第二部分,我不知所措。
还有什么是Java pollFirst()
方法的c#等效?
可能这一行就是原因
public void printTrans(double[,] dp, double[] prices, int K)
{
int i = K - 1;
int j = prices.Length; // <=== this line is the cause
导致j
在2D数组的边界之外引用索引。
如果您已经从java
移植,请重新检查您的java代码。
让这行
int j = prices.Length - 1;
或者你需要改变你创建数组的方式
var dp = new double[K + 1, prices.Length]; // <-- prices.Length would have to change here