Tentukan "maksimum sub-array" dari array yang diberikan sebagai "sub-array (berturut-turut) yang memiliki jumlah terbesar". Perhatikan tidak ada persyaratan "tidak nol". Keluarkan jumlah itu.
Berikan deskripsi kode Anda jika memungkinkan.
Masukan sampel 1:
1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14
Output sampel 1: 24
Deskripsi 1:
Jumlah terbesar dihasilkan dengan memotong 6 7 -8 9 10
dan menyimpulkan.
Input sampel 2: -1 -2 -3
Contoh output 2: 0
Deskripsi 2: Sederhana :) Subarray kosong adalah "terbesar".
Kebutuhan:
- Jangan membaca apa pun kecuali stdin, dan output harus pergi ke stdout.
- Batasan celah standar berlaku.
Pemeringkatan: Program terpendek memenangkan golf kode ini .
Jawaban:
Sekam ,
64 byteCobalah online!
sumber
Python 3 , 61 byte
Cobalah online!
Algoritma dicuri dari Wikipedia .
sumber
Pyth , 8 byte
Cobalah online!
Bagaimana?
sumber
05AB1E , 4 byte
Cobalah online!
-1 terima kasih kepada Adnan .
sumber
ÎŒOM
harus bekerja selama 4 byte.M
mencari jumlah terbesar di versi tumpukan yang rata.Jelly , 6 byte
Cobalah online!
sumber
C ++,
197195187 bytes-10 byte terima kasih kepada Zacharý
sumber
l
danh
lagian?R , 54 byte
Cobalah online!
Algoritma yang diambil dari: Masalah subarray maksimum
R , 65 byte
Cobalah online!
x
dari stdin.y
sebagai indeksx
.m
(awalnyam=0
).m
.m
.R , 72 byte
Cobalah online!
x
dari stdin.m
(awalnyam=0
).m
.m
.Gagasan gagal lainnya
58 byte
63 byte
72 byte
sumber
a=b=0
bekerja juga. Juga, Anda perlu menangani pencetakan output. Ketika dijalankan sebagai program lengkap (melaluisource
) ini tidak mencetak apa pun.cat(b)
, tetapi jika bersumber dariecho=TRUE
itu sudah cukup untuk memintab
hasil cetak.T=F
bukana=b=0
untuk menyelamatkan dua byte, karenamax
akan memaksab
untuknumeric
.Haskell , 28 byte
Cobalah online!
sumber
scanl
? jadifoldl((max<*>).(+))0
??05AB1E , 4 byte
-2 byte terima kasih kepada Adnan
Cobalah online!
sumber
ÎŒOM
harus bekerja selama 4 byteMathematica, 24 byte
sumber
Haskell ,
4133 byteCobalah online! terima kasih untuk Laikoni
sumber
g=
. Alih-alihconcatMap
Anda dapat menggunakan=<<
dari daftar monad: Coba online! (33 byte).Japt , 11 byte
Cobalah online!
Penjelasan
Metode alternatif, 11 byte
Dari @ETHproductions; berdasarkan jawaban Sekam Brute Forces .
Mendapat semua ekor dari array input dan secara total menjumlahkan masing-masing. Kemudian ratakan array dan dapatkan maks.
Cobalah online!
sumber
£sY å+Ãc rw
(juga 11 byte)Ruby,
615957 byteSaya baru mulai belajar Ruby, jadi inilah yang saya hasilkan.
Saya pertama kali melihat algoritma ini di versi bahasa Finlandia dari buku yang belum selesai ini . Ini dijelaskan dengan sangat baik di halaman 23.
Cobalah online!
sumber
JavaScript, 58 byte
Implementasi JS Golf dari algoritma Kadane. Dibuat sesingkat mungkin. Terbuka untuk saran yang membangun!
Apa yang saya pelajari dari posting ini: nilai balik
eval
- ketika statment terakhirnya adalah sebuahfor
loop - pada dasarnya adalah nilai terakhir yang ada di dalam loop. Keren!EDIT: disimpan empat byte berkat saran Justin dan Hermann.
sumber
return
dengan mengganti{...;return b;}
denganeval("...;b")
karena eval mengembalikan pernyataan terakhir.;b
, karena itu dikembalikan dari for loopGaia , 6 byte
Cobalah online!
sumber
Python 2 ,
5251 byteCobalah online!
sumber
Common Lisp, 73 byte
Cobalah online!
sumber
k , 14 byte
Cobalah online!
sumber
APL,
312927 byteCobalah online!(dimodifikasi sehingga akan berjalan di TryAPL)
Bagaimana?
∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕
Hasilkan jumlah subvektor⌈/
Maksimumsumber
CJam, 24 byte
Fungsi yang mengambil array angka sebagai input.
Cobalah secara Online
sumber
SAYA , 11 byte
Cobalah online! MY ada di TIO sekarang! Woo hoo!
Bagaimana?
⎕
= input yang dievaluasi𝟚
= subvektor35ǵ'
=chr(0x53)
(Σ, jumlah)ƒ
= string sebagai fungsi SAYA⇹
= peta(
= berlaku⍐
= maksimum↵
= keluaran dengan baris baru.Jumlah telah diperbaiki (
0
pada array kosong) agar ini berfungsi. Produk juga diperbaiki.sumber
J, 12 byte
Mirip dengan solusi K zgrep: jumlah pindaian semua sufiks (menghasilkan matriks), meratakan, ambil maks
Cobalah online!
CATATAN
untuk tidak terlalu banyak byte, Anda bisa mendapatkan solusi yang efisien (19 byte golf):
sumber
Aksioma, 127 byte
Ini akan menjadi O (# a ^ 3) Algo; Saya menyalinnya dari hasil C ++ one ...
sumber
Scala, 105 byte
Saya tidak menemukan cara yang lebih baik untuk menghasilkan array
daftarsub .sumber
Java 8, 242 byte
Coba di sini.
106 byte tanpa menggunakan persyaratan STDIN / STDOUT ..>.>
Coba di sini.
Penjelasan:
sumber