Определите «максимальный подмассив» данного массива как «(последовательный) подмассив с наибольшей суммой». Обратите внимание, что нет «ненулевого» требования. Выведите эту сумму.
Дайте описание вашего кода, если это возможно.
Пример ввода 1:
1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14
Пример вывода 1: 24
Описание 1:
Самая большая сумма получается путем вычитания 6 7 -8 9 10
и суммирования.
Пример ввода 2: -1 -2 -3
Пример вывода 2: 0
Описание 2: Это просто :) Пустой подмассив является «самым большим».
Требование:
- Не читайте ничего, кроме стандартного ввода, и вывод должен идти в стандартный вывод.
- Стандартные ограничения лазейки применяются.
Рейтинг: самая короткая программа выигрывает этот код-гольф .
Ответы:
Шелуха ,
64 байтаПопробуйте онлайн!
источник
Python 3 , 61 байт
Попробуйте онлайн!
Алгоритм украден из Википедии .
источник
Pyth , 8 байт
Попробуйте онлайн!
Как?
источник
05AB1E , 4 байта
Попробуйте онлайн!
-1 спасибо Аднану .
источник
ÎŒOM
должен работать на 4 байта.M
ищет наибольшее число в плоской версии стека.Желе , 6 байт
Попробуйте онлайн!
источник
C ++,
197195187 байт-10 байт благодаря Захари
источник
l
и вh
любом случае?R , 54 байта
Попробуйте онлайн!
Алгоритм взят из: Максимальная проблема подмассива
R 65 байт
Попробуйте онлайн!
x
из стандартного ввода.y
качестве индексаx
.m
(изначальноm=0
).m
.m
.R , 72 байта
Попробуйте онлайн!
x
из стандартного ввода.m
(изначальноm=0
).m
.m
.Другие неудачные идеи
58 байт
63 байта
72 байта
источник
a=b=0
тоже работает Кроме того, вам нужно обрабатывать печать на выходе. При запуске в качестве полной программы (черезsource
) это ничего не печатает.cat(b)
, но если с источникомecho=TRUE
этого достаточно, чтобы вызватьb
распечатку.T=F
вместо того,a=b=0
чтобы сохранить два байта, потому чтоmax
приведетb
кnumeric
.Haskell , 28 байт
Попробуйте онлайн!
источник
scanl
? такfoldl((max<*>).(+))0
??05AB1E , 4 байта
-2 байта благодаря Аднану
Попробуйте онлайн!
источник
ÎŒOM
должен работать на 4 байтаMathematica, 24 байта
источник
Haskell ,
4133 байтаПопробуйте онлайн! благодаря Лайкони
источник
g=
. Вместо этогоconcatMap
вы можете использовать=<<
из списка монаду: попробуйте онлайн! (33 байта).Japt , 11 байт
Попробуйте онлайн!
объяснение
Альтернативный метод, 11 байт
Из @ETHproductions; основанный на ответе Хаска Грубых Сил .
Получает все хвосты входного массива и кумулятивно суммирует каждый. Затем выравнивает массив и получает макс.
Попробуйте онлайн!
источник
£sY å+Ãc rw
(также 11 байт)Рубин,
615957 байтЯ только начал изучать Ruby, так что это то, что я придумал.
Впервые я увидел этот алгоритм в финской версии этой незаконченной книги . Это очень хорошо объяснено на странице 23.
Попробуйте онлайн!
источник
JavaScript, 58 байт
Гольф JS реализация алгоритма Кадане. Сделано как можно короче. Открыты для конструктивных предложений!
Из того, что я узнал из этого поста: возвращаемое значение
eval
- когда его последний статус представляет собойfor
цикл - в основном является последним значением, присутствующим внутри цикла. Круто!РЕДАКТИРОВАТЬ: сэкономил четыре байта благодаря предложениям Джастина и Германа.
источник
return
, заменив{...;return b;}
на,eval("...;b")
так как eval возвращает последний оператор.;b
, поскольку они возвращаются из цикла forGaia , 6 байт
Попробуйте онлайн!
источник
Python 2 ,
5251 байтПопробуйте онлайн!
источник
Common Lisp, 73 байта
Попробуйте онлайн!
источник
k , 14 байтов
Попробуйте онлайн!
источник
APL,
312927 байтПопробуйте онлайн! (изменено так, что оно будет работать на TryAPL)
Как?
∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕
Генерация сумм субвекторов⌈/
максимальнаяисточник
CJam, 24 байта
Функция, которая принимает массив чисел в качестве входных данных.
Попробуйте онлайн
источник
МОЙ , 11 байт
Попробуйте онлайн! МОЙ сейчас на ТИО! Woohoo!
Как?
⎕
= оцененный вклад𝟚
= подвекторы35ǵ'
=chr(0x53)
(Σ, сумма)ƒ
= строка как функция MY⇹
= карта(
= применить⍐
= максимум↵
= вывод с новой строкой.Сумма была исправлена (
0
на пустых массивах), чтобы это работало. Продукт был также исправлен.источник
J, 12 байт
Аналогично K-решению zgrep: проверка суммы всех суффиксов (создание матрицы), raze, take max
Попробуйте онлайн!
НОТА
для не слишком большого количества байтов вы можете получить эффективное решение (19 байтов в гольфе):
источник
Аксиома, 127 байт
Это будет O (# a ^ 3) Algo; Я копирую это из C ++ один ... результаты
источник
Scala, 105 байт
Я не нашел лучший способ генерировать суб
спискимассивов.источник
Java 8, 242 байта
Попробуй это здесь.
106 байт без использования требования STDIN / STDOUT ..>.>
Попробуй это здесь.
Объяснение:
источник