finden Sie die start-und end-index für eine max sub-array
public static void main(String[] args) {
int arr[]= {0,-1,2,-3,5,9,-5,10};
int max_ending_here=0;
int max_so_far=0;
int start =0;
int end=0;
for(int i=0;i< arr.length;i++)
{
max_ending_here=max_ending_here+arr[i];
if(max_ending_here<0)
{
max_ending_here=0;
}
if(max_so_far<max_ending_here){
max_so_far=max_ending_here;
}
}
System.out.println(max_so_far);
}
}
dieses Programm erzeugt die max Summe der sub-array ..in diesem Fall 19,mit {5,9,-5,10}..
jetzt habe ich feststellen müssen das start-und end-index dieser sub-array ..wie mache ich das ??
- Was ist Ihre voraussichtliche Ausgabe für diese? Frage ist nicht klar
- Gehen Sie für die kadane-Algorithmus.. maximum-sub-array in linearer Komplexität...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Diese
Okay, es gab ein problem bei der obigen Lösung als wies auf Steve P. Dies ist eine weitere Lösung, die funktionieren sollte für alle
list = [631, -583, -975]
Dies ist ein C-Programm um dieses problem zu lösen. Ich denke, Logik ist die gleiche für alle Sprachen, also habe ich dies geschrieben, Antwort.
Hier ist der Algorithmus für maxsubarray:
Befestigung Carl Saldanha Lösung:
Die Frage ist etwas unklar, aber ich vermute, eine "sub-array" ist die Hälfte der arr-Objekt.
Einen Lahmen Weg, dies zu tun, wie dies
Ich dieses Bild könnte nicht funktionieren, wenn die arr enthält eine ungerade Anzahl von Elementen.
Wenn Sie möchten, den Zugang zu einem höheren level-support, konvertieren Sie die primvate arrays, um eine Liste Objekt
Diese Weise haben Sie Zugriff auf ein collection-Objekt-Funktionalität.
Auch, wenn Sie Zeit haben, werfen Sie einen Blick auf die höhere Ordnung, die funktionale genannt reduzieren. Sie müssen eine Bibliothek, unterstützt die funktionale Programmierung. Guave oder lambdaJ vielleicht eine Methode reduzieren. Ich weiß, dass der apache-commons-fehlt einer, es sei denn, Sie wollen zu hacken, um es zusammen.
Hier ist eine Lösung in python - Kadane-Algorithmus erweitert, um drucken Sie die start/end-Indizes
Das einzige, was ich noch hinzufügen (mehrere Lösungen hier gepostet) ist, um den Fall abzudecken, dass die zahlen negativ sind, in welchem Fall die max sub-array wird nur die max-element. Ziemlich einfach zu machen.. nur zu verfolgen max-element und index der index des max-element, wie Sie Durchlaufen wird. Wenn die max-element negativ ist, wieder in den index statt.
Es ist auch der Fall von overflow eventuell zu behandeln. Ich habe gesehen, Algorithmus-tests als in Konto.. D.H., angenommen, MAXINT war eines der Elemente, und Sie versucht, um es hinzuzufügen. Ich glaube, dass einige der Codility (coding interview Screener) tests, die Rechnung zu tragen.
Einen O(n) Lösung in C wäre :-
Hier ist eine Lösung, bei Gehen mit Kadane-Algorithmus