Defina el "subarreglo máximo" de un conjunto dado como "un subconjunto (consecutivo) que tiene la mayor suma". Tenga en cuenta que no hay un requisito "distinto de cero". Salida de esa suma.
Da una descripción de tu código si es posible.
Entrada de muestra 1:
1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14
Salida de muestra 1: 24
Descripción 1:
la mayor suma se obtiene cortando 6 7 -8 9 10
y resumiendo.
Entrada de muestra 2: -1 -2 -3
Salida de muestra 2: 0
Descripción 2: Es simple :) Un subconjunto vacío es el "más grande".
Requisito:
- No lea nada excepto stdin, y la salida debería ir a stdout.
- Se aplican restricciones de lagunas estándar .
Clasificación: El programa más corto gana este código-golf .
Respuestas:
Casco ,
64 bytesPruébalo en línea!
fuente
Python 3 , 61 bytes
Pruébalo en línea!
Algoritmo robado de Wikipedia .
fuente
Pyth , 8 bytes
Pruébalo en línea!
¿Cómo?
fuente
05AB1E , 4 bytes
Pruébalo en línea!
-1 gracias a Adnan .
fuente
ÎŒOM
debería funcionar para 4 bytes.M
busca el número más grande en la versión aplanada de la pila.Jalea , 6 bytes
Pruébalo en línea!
fuente
C ++,
197195187 bytes-10 bytes gracias a Zacharý
fuente
l
y deh
todos modos?R , 54 bytes
Pruébalo en línea!
Algoritmo tomado de: Problema de submatriz máxima
R , 65 bytes
Pruébalo en línea!
x
de stdin.y
como índice dex
.m
(inicialmentem=0
).m
.m
.R , 72 bytes
Pruébalo en línea!
x
de stdin.m
(inicialmentem=0
).m
.m
.Otras ideas fracasadas
58 bytes
63 bytes
72 bytes
fuente
a=b=0
también funciona Además, debe manejar la impresión de la salida. Cuando se ejecuta como un programa completo (a travéssource
), esto no imprime nada.cat(b)
, pero si se obtieneecho=TRUE
, es suficiente para solicitar lab
impresión.T=F
lugar dea=b=0
guardar dos bytes, yamax
que obligaráb
anumeric
.Haskell , 28 bytes
Pruébalo en línea!
fuente
scanl
? entoncesfoldl((max<*>).(+))0
??05AB1E , 4 bytes
-2 bytes gracias a Adnan
Pruébalo en línea!
fuente
ÎŒOM
debería funcionar para 4 bytesMathematica, 24 bytes
fuente
Haskell ,
4133 bytesPruébalo en línea! gracias a Laikoni
fuente
g=
. En lugar deconcatMap
usarlo=<<
de la lista mónada: ¡ Pruébelo en línea! (33 bytes).Japt , 11 bytes
Pruébalo en línea!
Explicación
Método alternativo, 11 bytes.
De @ETHproductions; basado en la respuesta Husk de Brute Forces .
Obtiene todas las colas de la matriz de entrada y suma cada una de forma acumulativa. Luego aplana la matriz y obtiene el máximo.
Pruébalo en línea!
fuente
£sY å+Ãc rw
(también 11 bytes)Ruby,
615957 bytesAcabo de empezar a aprender Ruby, así que esto es lo que se me ocurrió.
Vi este algoritmo por primera vez en la versión finlandesa de este libro inacabado . Está muy bien explicado en la página 23.
Pruébalo en línea!
fuente
JavaScript, 58 bytes
Implementación JS Golfed del algoritmo de Kadane. Hecho lo más corto posible. Abierto a sugerencias constructivas!
Lo que aprendí de esta publicación: el valor de retorno de
eval
- cuando su último estado es unfor
bucle - es básicamente el último valor presente dentro del bucle. ¡Guay!EDITAR: ahorró cuatro bytes gracias a las sugerencias de Justin y Hermann.
fuente
return
reemplazando{...;return b;}
coneval("...;b")
ya que eval devuelve la última instrucción.;b
, ya que se devuelve desde el bucle forGaia , 6 bytes
Pruébalo en línea!
fuente
Python 2 ,
5251 bytesPruébalo en línea!
fuente
Lisp común, 73 bytes
Pruébalo en línea!
fuente
k , 14 bytes
Pruébalo en línea!
fuente
APL,
312927 bytesPruébalo en línea! (modificado para que se ejecute en TryAPL)
¿Cómo?
∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕
Generar sumas de subvectores.⌈/
Máximofuente
CJam, 24 bytes
Función que toma una matriz de números como entrada.
Pruébalo en línea
fuente
MI , 11 bytes
Pruébalo en línea! ¡MY está en TIO ahora! Woohoo!
¿Cómo?
⎕
= entrada evaluada𝟚
= subvectores35ǵ'
=chr(0x53)
(Σ, suma)ƒ
= cadena como una función MY⇹
= mapa(
= aplicar⍐
= máximo↵
= salida con una nueva línea.La suma fue corregida (
0
en matrices vacías) para que esto funcione. El producto también fue reparado.fuente
J, 12 bytes
Similar a la solución K de zgrep: la suma de exploración de todos los sufijos (produce una matriz), raze, take max
Pruébalo en línea!
NOTA
para no muchos bytes más, puede obtener una solución eficiente (19 bytes de golf):
fuente
Axioma, 127 bytes
Esto sería O (# a ^ 3) Algo; Lo copio de C ++ one ... resultados
fuente
Scala, 105 bytes
No he encontrado ninguna mejor manera de generar los sub
listas dematrices.fuente
Java 8, 242 bytes
Pruébalo aquí
106 bytes sin usar el requisito STDIN / STDOUT ..>.>
Pruébalo aquí
Explicación:
fuente