Hallo zusammen,
komme bei folgendem Java-Code nicht so recht weiter. Es geht um das Problem "Teilfolge maximaler Summe", bei dem ich ein Tripel (von, bis, summe) ausgeben möchte. Die Berechnung der Summe funktioniert auch super (habe einen Algorithmus aus der Vorlesung in Java überführt). Und jetzt möchte ich halt nicht nur die Summe der Teilfolge ausgeben, sondern eben auch die Nummer des linken und rechten Elementes eben dieser Teilfolge. Stehe etwas auf dem Schlauch, habe schon alles mögliche ausprobiert - wäre super, wenn jemand einen Tipp für mich hätte.
Vielen Dank im voraus!
Gruß, squirrel
Code
[B]public[/B] [B]class[/B] Teilfolge {
[B]int[/B][] TeilfolgeMaxSumme([B]final[/B] [B]int[/B][] folge) {
[B]int[/B][][] s = [B]new[/B] [B]int[/B] [folge.length] [folge.length];
[B]int[/B][] max = [B]new[/B] [B]int[/B][3];
max[2] = Integer.MIN_VALUE;
[B]int[/B][] leer = [B]new[/B] [B]int[/B][3];
leer[0] = 0;
leer[1] = 0;
leer[2] = 0;
[B]for[/B] ([B]int[/B] i = 0; i < folge.length; i++) {
[B]for[/B] ([B]int[/B] j = 0; j < folge.length; j++) {
s[i][j] = 0;
}
}
s[0][0] = folge[0];
[B]for[/B] ([B]int[/B] bis = 1; bis < folge.length; bis++) {
s[0][bis] = s [0][bis - 1] + folge[bis];
}
[B]for[/B] ([B]int[/B] von = 1; von < folge.length; von++) {
[B]for[/B] ([B]int[/B] bis = von; bis < folge.length; bis++) {
s[von][bis] = s[von - 1][bis] - folge[von - 1];
}
}
[B]for[/B] ([B]int[/B] von = 0; von < folge.length; von++) {
[B]for[/B] ([B]int[/B] bis = 0; bis < folge.length; bis++) {
max[2] = Math.max(max[2], s[von][bis]);
}
}
[B]if[/B] (folge.length == 0)
[B]return[/B] leer;
[B]else[/B]
[B]return[/B] max;
}
[B]public[/B] [B]static[/B] [B]void[/B] main(String[] args) {
Teilfolge t = [B]new[/B] Teilfolge();
[B]final[/B] [B]int[/B][] folge = {-1, 3, 2, -4, 5, -7, 2, 2, -3, 5, -2, 3, -8, 2};
[COLOR=#689868]//[B]final[/B] [B]int[/B][] folge = {0};[/COLOR]
[B]int[/B][] erg = [B]new[/B] [B]int[/B][2];
erg = t.TeilfolgeMaxSumme(folge);
System.out.println(erg[0] + " " + erg[1] + " " + erg[2]);
}
}
Alles anzeigen