Ich habe folgende code so gut übersetzt ich kann von Java nach C#:Index Outside of Bounds auf Vektormaximierungsalgorithmus
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)]);
}
}
Fehler treten in der zweiten Methode auf den Leitungen:
if (dp[i, j] == dp[i, j - 1])
und
for (int z = j - 1; z >= 0; z--)
{
if (dp[i - 1, z] - prices[z] == maxDiff)
Ich bekomme eine Index was outside the bounds of the array
. Error. Ich verstehe, was dieser Fehler bedeutet, aber ich habe keine Ahnung, wie ich diesen Fehler beheben kann. Es hat mich einiges gekostet, den ersten Teil dieses Codes zu verstehen, aber für den zweiten Teil bin ich ratlos.
Auch was ist das C# -Aquivalent der Java pollFirst()
Methode?
erstellen, welche Zeile Sie den Fehler zu bekommen? –
@MiguelSanchez Ich habe die Antwort bearbeitet, um zu zeigen, wo der Fehler auftritt. –
Das Äquivalent von [pollFirst()] (http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html) vorausgesetzt, Sie verwenden .NET [LinkedList] (https://msdn.microsoft.com/en-us/library/he2s3bh7.aspx) ist [Erste] (https://msdn.microsoft.com/en-us/library/ms132187.aspx) und wenn es nicht null ist, rufen Sie [ RemoveFirst] (https://msdn.microsoft.com/en-us/library/ms132181.aspx) – Martheen