Definieren Sie das "maximale Unterarray" eines bestimmten Arrays als "ein (aufeinanderfolgendes) Unterarray mit der größten Summe". Beachten Sie, dass es keine "Nicht-Null" -Anforderung gibt. Gib diese Summe aus.
Geben Sie nach Möglichkeit eine Beschreibung Ihres Codes an.
Beispieleingang 1:
1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14
Beispielausgabe 1: 24
Beschreibung 1:
Die größte Summe ergibt sich durch Ausschneiden 6 7 -8 9 10
und Aufsummieren.
Beispiel Eingabe 2: -1 -2 -3
Beispiel Ausgabe 2: 0
Beschreibung 2: Es ist einfach :) Ein leeres Subarray ist das "größte".
Anforderung:
- Lies nichts außer stdin und die Ausgabe sollte auf stdout gehen.
- Standard Lücken Einschränkungen gelten.
Ranking: Das kürzeste Programm gewinnt diesen Code-Golf .
Antworten:
Schale ,
64 BytesProbieren Sie es online!
quelle
Python 3 , 61 Bytes
Probieren Sie es online!
Algorithmus aus Wikipedia gestohlen .
quelle
Pyth , 8 Bytes
Probieren Sie es online!
Wie?
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
-1 danke an Adnan .
quelle
ÎŒOM
für 4 Bytes funktionieren.M
sucht nach der größten Zahl in der abgeflachten Version des Stapels.Gelee , 6 Bytes
Probieren Sie es online!
quelle
C ++,
197195187 Bytes-10 Bytes dank Zacharý
quelle
l
undh
sowieso?R , 54 Bytes
Probieren Sie es online!
Algorithmus entnommen aus: Maximales Subarray-Problem
R , 65 Bytes
Probieren Sie es online!
x
von stdin.y
als Indexx
.m
(anfangsm=0
).m
.m
.R , 72 Bytes
Probieren Sie es online!
x
von stdin.m
(anfangsm=0
).m
.m
.Andere erfolglose Ideen
58 Bytes
63 Bytes
72 Bytes
quelle
a=b=0
funktioniert auch. Außerdem müssen Sie das Drucken der Ausgabe erledigen. Wenn es als vollständiges Programm (durchsource
) ausgeführt wird, wird nichts gedruckt.cat(b)
, aber wenn es mitecho=TRUE
ihm bezogen wird, ist es genug,b
um den Ausdruck anzufordern .T=F
anstelle vona=b=0
zwei Bytes zu speichern, weilmax
zwingen wirdb
zunumeric
.Haskell , 28 Bytes
Probieren Sie es online!
quelle
scanl
? alsofoldl((max<*>).(+))0
??05AB1E , 4 Bytes
-2 Bytes dank Adnan
Probieren Sie es online!
quelle
ÎŒOM
sollte für 4 Bytes arbeitenMathematica, 24 Bytes
quelle
Haskell ,
4133 BytesProbieren Sie es online! danke an laikoni
quelle
g=
. AnstattconcatMap
Sie=<<
aus der Liste Monade zu verwenden: Probieren Sie es online! (33 Bytes).Japt , 11 Bytes
Probieren Sie es online!
Erläuterung
Alternative Methode, 11 Bytes
Aus @ETHproductions; basierend auf der Antwort von Brute Forces 'Husk .
Ruft alle Endpunkte des Eingabearrays ab und summiert sie kumulativ. Dann wird das Array abgeflacht und die max.
Probieren Sie es online!
quelle
£sY å+Ãc rw
(ebenfalls 11 Bytes)Ruby,
615957 BytesIch habe gerade angefangen, Ruby zu lernen, also habe ich mir das ausgedacht.
Ich habe diesen Algorithmus zum ersten Mal in der finnischen Version dieses unvollendeten Buches gesehen . Dies wird auf Seite 23 sehr gut erklärt.
Probieren Sie es online!
quelle
JavaScript, 58 Byte
Golfed JS-Implementierung von Kadanes Algorithmus. So kurz wie möglich gemacht. Offen für konstruktive Vorschläge!
Was ich aus diesem Beitrag gelernt habe: Rückgabewert von
eval
- wenn seine letzte Anweisung einefor
Schleife ist - ist im Grunde der letzte Wert, der in der Schleife vorhanden ist. Cool!BEARBEITEN: Vier Bytes gespart dank Justins und Hermanns Vorschlägen.
quelle
return
durch den Austausch{...;return b;}
miteval("...;b")
da eval die letzte Anweisung gibt.;b
, indem Sie sie entfernen , da sie von der for-Schleife zurückgegeben werdenGaia , 6 Bytes
Probieren Sie es online!
quelle
Python 2 ,
5251 BytesProbieren Sie es online!
quelle
Common Lisp, 73 Bytes
Probieren Sie es online!
quelle
k , 14 Bytes
Probieren Sie es online!
quelle
APL,
312927 BytesProbieren Sie es online! (geändert, damit es auf TryAPL läuft)
Wie?
∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕
Generieren Sie Summen von Subvektoren⌈/
Maximalquelle
CJam, 24 Bytes
Funktion, die ein Array von Zahlen als Eingabe verwendet.
Probieren Sie es online
quelle
MEIN , 11 Bytes
Probieren Sie es online! MY ist jetzt bei TIO! Woohoo!
Wie?
⎕
= ausgewerteter Eingang𝟚
= Subvektoren35ǵ'
=chr(0x53)
(Σ, Summe)ƒ
= string als MY-Funktion⇹
= Karte(
= bewerben⍐
= maximal↵
= Ausgabe mit einem Zeilenumbruch.Die Summe wurde (
0
bei leeren Arrays) korrigiert, damit dies funktioniert. Produkt wurde auch behoben.quelle
J, 12 Bytes
Ähnlich wie bei der K-Lösung von zgrep: Die Scan-Summe aller Suffixe (ergibt eine Matrix), raze, take max
Probieren Sie es online!
HINWEIS
Für nicht zu viele Bytes erhalten Sie eine effiziente Lösung (19 Bytes Golf):
quelle
Axiom, 127 Bytes
Dies wäre O (# a ^ 3) Algo; Ich kopiere es aus dem C ++ ein ... Ergebnisse
quelle
Scala, 105 Bytes
Ich fand keinen besseren Weg , um die Unter erzeugen
ListenArrays.quelle
Java 8, 242 Bytes
Probieren Sie es hier aus.
106 Bytes ohne Verwendung der STDIN / STDOUT-Anforderung ..>.>
Probieren Sie es hier aus.
Erläuterung:
quelle