Methoden Teil-Array mit Maximalwert bestimmen

Daisoke

Neues Mitglied
Hallo zusammen.
Bin noch relativ neu dabei.

Ich habe folgendes Problem:

Ich möchte aus einem Array die maximale Summe eines Teil-Arrays ermitteln.

Beispiel: Bei einem Array a={1,2,3,4,-100,1,2,3,4,5,6} sollte das Ergebnis 21 sein.

Ich sitze lange an diesem Problem aber ich habe gerade keinen Anhaltspunkt bei dem Verfahren mithilfe einer doppelten Schleife.

Aktuell sieht mein Verfahren so aus:

Java:
[/B]
public static int myArray(int[] s) {
        int max = s[0];
        for (int i = 0; i <= s.length - 1; i++) {
            for (int j = i; j < s.length - 1; j++) {
                int total = s[i];
                if (total >= max) {
                    total = total + s[j];
                }
                max = total;
            }
        }
        return max;
    }
[B]

Hier berechne ich den Wert 10.
Ich bitte euch um einen kleinen Hinweis, wie ich das Problem beheben könnte.
 

Jw456

Top Contributor
wieso doppelte Schleife?

du gehst das Array einmal durch und addierst die werte
du willst doch die Quersumme haben wie würdest du das auf Papier oder Kopf machen
 

Jw456

Top Contributor
Frage womit wird denn dein Array geteilt?
du willst die Quersumme doch erst ab einer ganz bestimmten Stelle wie stellst du das fest ?
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Der erste Schritt ist immer, dass Du das Vorgehen, den Algorithmus, genau formulierst.

Du musst alle Teil-Arrays ermitteln. Das kannst Du mit zwei Schleifen machen. Aber die Grenzen musst Du noch einmal betrachten!

Also nehmen wir einmal das Array [1, 2, 3]
Alle möglichen Teilarrays wären dann erst nur [1], [1,2], [1,2,3]
Dann geht es mit der 2 los - aber welche Teilarrays betrachtest Du dann noch?

Wenn Du alle Teil-Arrays bilden kannst (mit zwei Schleifen), dann wäre die Frage, in wie weit Du daraus jetzt die Summen erstellen kannst. Das Ginge zur Not auch wieder mit einer einfachen Schleife.

Du kannst Dir das aber ggf. auf einem Zettel noch etwas überlegen - wenn Du nur die Teilarrays bildest mit dem [1], [1,2], [1,2,3] - kannst Du da ggf. schon direkt die Summe bilden bei jedem Schritt?
 

Jw456

Top Contributor
Ok

Dann Bilde doch in der inneren Schleife immer die Quersumme.
Am ende prüfst du erst ob das total Ergebnis grösser als max ist .
Ist es das merkst du es dir setzt das max, wenn nicht mache weiter.
 

Jw456

Top Contributor
Java:
for (int i = 0; i < s.length; i++) {
            int total = s[i];
            for (int j = i + 1; j < s.length; j++) {
                total = total + s[j];
            }
    ...
 

Jw456

Top Contributor
Der erste Schritt ist immer, dass Du das Vorgehen, den Algorithmus, genau formulierst.

Du musst alle Teil-Arrays ermitteln. Das kannst Du mit zwei Schleifen machen. Aber die Grenzen musst Du noch einmal betrachten!

Also nehmen wir einmal das Array [1, 2, 3]
Alle möglichen Teilarrays wären dann erst nur [1], [1,2], [1,2,3]
Dann geht es mit der 2 los - aber welche Teilarrays betrachtest Du dann noch?

Wenn Du alle Teil-Arrays bilden kannst (mit zwei Schleifen), dann wäre die Frage, in wie weit Du daraus jetzt die Summen erstellen kannst. Das Ginge zur Not auch wieder mit einer einfachen Schleife.

Du kannst Dir das aber ggf. auf einem Zettel noch etwas überlegen - wenn Du nur die Teilarrays bildest mit dem [1], [1,2], [1,2,3] - kannst Du da ggf. schon direkt die Summe bilden bei jedem Schritt?
Die Teil Bereiche die er sucht sind
1,2,3
2,3
3
Um bei deinem Beispiel zu bleiben.
 

KonradN

Super-Moderator
Mitarbeiter
Wo braucht man bitte eine Quersumme bei der Aufgabe?

Und in welcher Reihenfolge er die Teilarrays bildet, ist egal. Wobei die Reihenfolge, die ich genannt habe schlicht den Vorteil hat, dass man beim Erstellen der Teilarrays auch direkt die Summe bilden kann so dass eben die 2 verschachtelten Schleifen ausreichen.
 

Jw456

Top Contributor
Der TE will das mit zwei Schleifen haben, und genau das haben ich auch erklärt.
Das macht auch der Code Ausschnitt den ich gegeben habe.
Gut du störst dich wider an der Begrifflichkeit (Quersumme) dann sagen wir er addiert in der inneren Schleife die Zahlen-Kolonne, und genau das mache ich auch. Und will der TE auch machen.
Und das größte Ergebnis soll er sich merken. Das habe ich natürlich noch nicht gemacht.

Java:
int[] a = {1,2,3,4,-100,1,2,3,4,5,6};

1+2+3+4+(-100)+1+2+3+4+5+6 = -69
2+3+4+(-100)+1+2+3+4+5+6 = -70
3+4+(-100)+1+2+3+4+5+6 = -72
4+(-100)+1+2+3+4+5+6 = -75
-100+1+2+3+4+5+6 = -79
1+2+3+4+5+6 = 21
2+3+4+5+6 = 20
3+4+5+6 = 18
4+5+6 = 15
5+6 = 11
6 = 6


Bei dir würde es so anfangen.
Code:
1=1
1+2 = 3
1+2+3 = 6
1+2+3+4 = 10
1+2+3+4+(-100) = -90
1+2+3+4+(-100)+1 = -89
1+2+3+4+(-100)+1+2 = -87
1+2+3+4+(-100)+1+2+3 = -84
1+2+3+4+(-100)+1+2+3+4+5 = -75
1+2+3+4+(-100)+1+2+3+4+5+6 = -69

Ja du sagst danach geht es mit der 2 weiter .
Also
Code:
2 = 2
2+3 = 5
2+3+4 = 9
2+3+4+(-100) = -91
....

Ja auch du würdest zu

Code:
1+2+3+4+5+6 = 21

Kommen
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
a) Quersumme ist ein klar definierter Begriff. Wirf nicht mit Begriffen um Dich, wenn Du die Bedeutung nicht kennst. Und wenn man Dich auf sowas hinweist, dann ist eine Reaktion a.la. "Wenn Du Dich daran störst" gelinde gesagt: Dumm. Eigentlich sollte es in Deinem Interesse sein, dass Du Begriffe korrekt benutzt. Hast Du denn einmal den Begriff Quersumme nachgeschaut? Z.B. auf Wikipedia?

b) Deine Beiträge zu dem Algorithmus sind teilweise sehr verwirrend. Wenn Du bei dem größten Teilarray anfängst, dann brauchst Du vermutlich 3 Schleifen: Eine für den Anfang, eine für das Ende und eine zur Berechnung der Summe. Ich gewinne daher den Eindruck, dass Du den Algorithmus noch nicht wirklich durchblickt hast. Hast Du das denn einmal für Dich wirklich gelöst? Hast Du einen fertigen Code? Das würde Dir gewisse Sicherheit geben, wenn Du so auftrittst.

Man könnte die (Teil-)Array-Elemente ja als die Ziffern einer Zahl im 4294967296er-System betrachten.;)
Ja, nur ich fürchte, dass dies dann bei Elementen > 9 oder < -9 sowie bei negativen Zahlen zu nicht wirklich brauchbaren Ergebnissen führen würde. ;)
 

Jw456

Top Contributor
b) Deine Beiträge zu dem Algorithmus sind teilweise sehr verwirrend. Wenn Du bei dem größten Teilarray anfängst, dann brauchst Du vermutlich 3 Schleifen: Eine für den Anfang, eine für das Ende und eine zur Berechnung der Summe. Ich gewinne daher den Eindruck, dass Du den Algorithmus noch nicht wirklich durchblickt hast. Hast Du das denn einmal für Dich wirklich gelöst? Hast Du einen fertigen Code? Das würde Dir gewisse Sicherheit geben, wenn Du so auftrittst.

b.)
Du hast die vorgehensweise in Post #6 beschrieben und da würdest du 3 Schleifen brauchen die dritte zum Addieren .

Also nehmen wir einmal das Array [1, 2, 3]
Alle möglichen Teilarrays wären dann erst nur [1], [1,2], [1,2,3]
Dann geht es mit der 2 los - aber welche Teilarrays betrachtest Du dann noch?

 

KonradN

Super-Moderator
Mitarbeiter
b.)
Du hast die vorgehensweise in Post #6 beschrieben und da würdest du 3 Schleifen brauchen die dritte zum Addieren .
Das ist jetzt nicht Dein Ernst, oder? Sorry, aber hast du den Beitrag ganz gelesen? Und verstanden? Der letzte Abschnitt weist darauf hin, dass man den Schritt der Summenberechnung direkt in der zweiten Schleife abhanden kann.

Vielleicht willst di das, das ich dem TE geraten habe, selbst erst einmal nachvollziehen?
 

Meniskusschaden

Top Contributor
Du hast die vorgehensweise in Post #6 beschrieben und da würdest du 3 Schleifen brauchen die dritte zum Addieren .
Er hat - wohl aus didaktischen Gründen - geschrieben, dass es "zur Not" auch mit drei Schleifen ginge und den Gedankenanstoss zur direkten Summenbildung gleich mitgeliefert. Das sollte der TE aber selbst entdecken.

Zwischen euren Lösungsansätzen kann ich im Moment übrigens keinen wesentlichen Unterschied feststellen.
 

Jw456

Top Contributor
Das ist jetzt nicht Dein Ernst, oder? Sorry, aber hast du den Beitrag ganz gelesen? Und verstanden? Der letzte Abschnitt weist darauf hin, dass man den Schritt der Summenberechnung direkt in der zweiten Schleife abhanden kann.

Vielleicht willst di das, das ich dem TE geraten habe, selbst erst einmal nachvollziehen?
Hast du dir meinen Post #8
Angesehen und angesehen das ich in der inneren Schleife addiere.
ich wollte natürlich nicht denn kompetten Code geben
 

KonradN

Super-Moderator
Mitarbeiter
Zwischen euren Lösungsansätzen kann ich im Moment übrigens keinen wesentlichen Unterschied feststellen.
Mich regt es einfach massiv auf, dass da ständig Kommentare zu mir kommen, die nichts beitragen. Was hilft denn das #9 weiter? Ich erkläre ein Vorgehen. Und erläutere dieses Vorgehen an Hand eine Beispiels. Das Vorgehen natürlich erst einmal ganz nach Schema F. Das sollte ja jedem, der meine Beiträge kennt, bekannt sein. Und dann erst den Hinweis auf eine mögliche Optimierung.

Und das Vorgehen richtet sich dabei relativ stark, nach dem, was der TE schon hat. Und da hat er zwei Schleifen die den Zähler immer erhöhen.

Aber wer erkläre ich, wieso ich so antworte, wie ich antworte? Die, die es interessieren sollte und die vielleicht auch vor einer Antwort etwas mehr nachdenken sollten, was für den TE Sinn machen könnte, wird es nicht weiter interessieren.

Aber - um es einfach abzuschließen damit ich aus dem Thread dann raus bin:

Eine Lösung kann so aussehen:
Java:
        int [] values = { -100, 4, -3, 4, -5};

        int max = values[0];

        for (int startIndex = 0; startIndex < values.length; startIndex++) {
            int summe = 0;
            for (int endIndex = startIndex; endIndex < values.length; endIndex++) {
                summe += values[endIndex];
                if (max < summe) max = summe;
            }
        }

Beim setzen des endIndex wird der entsprechende Wert zur Summe hinzu addiert. Und immer, wenn man ein neuen Startpunkt hat, dann wird bei 0 angefangen.

Also wenn man das Array [1, 2, 3] hat, dann gehe ich ja von Hand auch nicht anders vor:
Ich betrachte
Summe erst 0.
dann [1] -> 0 + 1 = 1
dann [1, 2] -> 1 + 2 = 3
dann [1, 2, 3] -> 3 +3 = 6
Es wird also immer das vorherige Summen-Ergebnis weiter genommen.

Das Schema F hätte zu einem Ergebnis geführt, das so ausgesehen hätte:
Code:
        int max = values[0];

        for (int startIndex = 0; startIndex < values.length; startIndex++) {
            for (int endIndex = startIndex; endIndex < values.length; endIndex++) {
                int summe = berechneSumme(values, startIndex, endIndex);
                if (max < summe) max = summe;
            }
        }
 

KonradN

Super-Moderator
Mitarbeiter
Es ging mir nie um Deinen Code sondern um Deine Aussagen im Text.

Wie ist dein #9 zu verstehen? Du gehst die Teilarrays ja ebenso in der anderen Reihenfolge an. Aber ich will das nicht weiter diskutieren.
 

Jw456

Top Contributor
Ich habe deine Aussage so verstanden das du
Array [1, 2, 3]

Das du vom außen betrachtet

{ 0+1 rechnest
Zweiter Durchlauf
1+2
Dritter
1+2+ 3 } // innere Schleife


Dann mit deiner 2 weiter machst

{ 0+2 rechnest
Zweiter Durchlauf
2+3
} // innere Schleife

Ich finde es für mich eine verwirrende Schreibweise
>Also nehmen wir einmal das Array [1, 2, 3]
>Alle möglichen Teilarrays wären dann erst nur [1], [1,2], [1,2,3]

Ich sehe hier 0+1 / 1+2 / 1+2+3 von außen im ganzen gesehen.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Bei deinem Code könnte man sogar wenn das zwischen Ergebnis summe keiner als max ist , die innere Schleife auch abbrechen verlassen.


Gut dann habe ich deine Algorithmus Erklärung falsch verstanden und wir haben an einander vorbei geredet.
Aber auch du hast nicht versucht meine sichtweise zu verstehen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Teil einer URL auslesen Allgemeine Java-Themen 13
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
F Teil eines Bildes laden Allgemeine Java-Themen 1
N httpGet >> Ein Teil der Anfrage ist ungültig Allgemeine Java-Themen 6
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
J Teil eines Image/ImageIcon zeichnen Allgemeine Java-Themen 2
D Wie prüfen, ob ein String Teil eines Enum Types ist? Allgemeine Java-Themen 12
H ein Teil des Strings rausfiltern Allgemeine Java-Themen 8
L Ping Probe auf hinteren Teil einer Email Adresse (nach @) Allgemeine Java-Themen 5
R Probleme mit Collections - Teil 2 Allgemeine Java-Themen 4
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
V4ll3.Wff Array in Java Allgemeine Java-Themen 4
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
H Array Sportschütze Allgemeine Java-Themen 6
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
M Array verändern Allgemeine Java-Themen 1
A JavaFX 2 dimensionales array Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
parrot Array Aufgabe Allgemeine Java-Themen 3
N String Array Eingabe Allgemeine Java-Themen 6
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
A Array Problem Allgemeine Java-Themen 8
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
F Datei in String-Array einlesen Allgemeine Java-Themen 8
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
F 3 Dimensionales Array mit Allgemeine Java-Themen 9
M Steueralgorithmus verwandelt Array in Anfangszustand Allgemeine Java-Themen 9
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
D Datentypen 2-3 Baum erstellen mit geordnetem int-array Allgemeine Java-Themen 0
T Objekt in Array packen Allgemeine Java-Themen 6
M Zahlen in Array anordnen Allgemeine Java-Themen 8
M Eclipse Unvollständigen Array ansteuern Allgemeine Java-Themen 2
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
R convert 2d array list to 2d array Allgemeine Java-Themen 1
J json Array würfel Spalten durcheinander Allgemeine Java-Themen 9
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
L Datentypen 3D Array Allgemeine Java-Themen 3
M 2D Array mit unterschiedlichen Längen erstellen und befüllen Allgemeine Java-Themen 11
Mario1409 Methoden JSON Array von URL Allgemeine Java-Themen 8
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
H Zweidimensionales Array - Zellen der Tabelle verbinden Allgemeine Java-Themen 2
M Zweidimensionales Array mit Binärzahlen füllen Allgemeine Java-Themen 8
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
J Wie kann ich ein Java Array als Säulendiagramm ausgeben? Allgemeine Java-Themen 2
Z 2D Array Pixels reparieren Allgemeine Java-Themen 2
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
B Polibios Array erweitern Allgemeine Java-Themen 1
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
J Array-List Bubble-Sort Allgemeine Java-Themen 12
4 Variablen Int-Array Int Zuweisen Allgemeine Java-Themen 7
J Array Allgemeine Java-Themen 8
Z Array mit unterschiedlichen Werten Allgemeine Java-Themen 1
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben