Finde mit Hilfe einer Rekursion einen Index, der ein Array in zwei Teile teilt, so dass beide Teile die gleiche Summe haben.
Schneiden bedeutet, wie mit einem Messer zu schneiden. Alle Zellen mit dem Index <= zum Ergebnis müssen in ihrer Summe gleich sein wie alle Zellen mit dem Index > zum Ergebnis. Keine Zelle darf ausgelassen werden oder Teil beider Seiten sein.
Die Arrays enthalten beliebige ganze Zahlen (d. h. positive, negative und Nullen).
Wenn es keinen solchen Index gibt, geben Sie zurück -1
.
Es ist nicht erlaubt, Heap-Objekte zuzuweisen.
Sie müssen dies in einem einzigen Durchgang tun.
Sie müssen dies mit Rekursion tun (d.h. Sie können keine Schleifenkonstrukte verwenden).
Kann in jeder Sprache oder in Pseudocode sein.
Ich habe vergessen, dies hinzuzufügen : Sie können das Array nicht ändern
4 Stimmen
Wie definiert man einen "einzigen Durchgang" in der Rekursion? Meinen Sie, dass jeder Knoten nur einmal berührt wird?
0 Stimmen
Ja, jeder Knoten kann nur einmal gelesen werden (das Array ist RO, siehe die aktualisierte Version der Frage)
0 Stimmen
Was ist, wenn die Gesamtsumme des Feldes ungerade ist, oder wird davon ausgegangen, dass dies nicht der Fall sein wird?
0 Stimmen
@Rechnung: beliebige ganze Zahlen (positiv / negativ / Nullen)
0 Stimmen
@victor kann ungerade sein. zum Beispiel dieses Array: [1, 1, 2] eine ungerade Anzahl von Elementen und hat eine Lösung
0 Stimmen
@Nosredna Siehe die Frage ... "Wenn es keinen solchen Index gibt, wird -1 zurückgegeben."
0 Stimmen
Ah, jetzt verstehe ich. Ich habe nur Victors Frage interpretiert.
0 Stimmen
Ja... übersehen, dass das "kein solcher Index" bedeuten würde. Ich fand eine Lösung sofort mit Java, aber beteiligt Lesen Elemente mehr als einmal :( noch O(N) tho.
0 Stimmen
Ein paar Testvektoren: f([1,2,3]) = 2, f([1,2,3,4]) = -1, f([1,2,3,4,4,6]) = 4 (alle unter der Annahme, dass die Indizierung auf Null basiert und dass der zurückgegebene Index das erste Element auf der rechten Seite des Arrays sein sollte.
0 Stimmen
@victor, wenn Sie Elemente mehr als einmal lesen, dann ist es trivial: Berechnen Sie zuerst die Summe des Arrays und schieben Sie dann eines nach dem anderen vor, bis die Teilsumme die Hälfte der Gesamtsumme ist.