Введение:
Вдохновленные этими двумя SO-вопросами (без сомнения, из одного и того же класса): выведите элементы в подмассиве максимальной суммы без смежных элементов java и максимальной суммы несмежных элементов массива, которые будут напечатаны .
Вызов:
Учитывая список целых чисел, выведите подпоследовательность, состоящую из несмежных элементов, которые имеют наибольшую сумму. Вот несколько примеров:
[1,2,3,-1,-3,2,5]
приведет к[1,3,5]
(с суммой9
) на основе индексов 0[0,2,6]
.[4,5,4,3]
приведет к либо[4,4]
(с суммой8
) в индексах на основе 0,[0,2]
либо[5,3]
(также с суммой8
) в индексах на основе 0[1,3]
.[5,5,10,100,10,5]
приведет к[5,100,5]
(с суммой110
) либо на основе индексов 0[0,3,5]
или[1,3,5]
.
Что наиболее важно в приведенных выше примерах, индексы, содержащие элементы, по крайней мере, 2 расположены друг от друга. Если мы посмотрим на пример [5,5,10,100,10,5]
более подробно: у нас есть следующая потенциальная подпоследовательность, содержащая несмежные элементы; с их индексами ниже; с их суммами ниже этого:
[[5],[10],[100],[10],[5],[5],[100,5],[10,5],[10,10],[5,5],[5,10],[5,100],[5,5],[5,10],[5,100],[5,10],[5,100,5],[5,100,5],[5,10,5],[5,10,10]] // non-adjacent subsequences
[[5],[ 4],[ 3],[ 2],[1],[0],[ 3,5],[ 2,5],[ 2, 4],[1,5],[1, 4],[1, 3],[0,5],[0, 4],[0, 3],[0, 2],[1, 3,5],[0, 3,5],[0, 2,5],[0, 2, 4]] // at these 0-based indices
[ 5, 10, 100, 10, 5, 5, 105, 15, 20, 10, 15, 105, 10, 15, 105, 15, 110, 110, 20, 25] // with these sums
^ ^ // and these two maximums
Поскольку максимальные суммы равны 110
, мы выводим [5,100,5]
результат.
Правила соревнований:
- Вам разрешено выводить пары ключ-значение индекса + значение. Таким образом, вместо
[5,100,5]
вы можете выводить[[0,5],[3,100],[5,5]]
или[[1,5],[3,100],[5,5]]
как результат (или[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
когда используется индексация на основе 1 вместо 0 на основе).- Если вы используете пары ключ-значение, они также могут быть в обратном или случайном порядке, поскольку ясно, какие значения подразумеваются из-за парного индекса.
- Вывод только индексов без значений не допускается. Он должен либо выводить значения, либо значения / индексы в виде пар ключ-значение (или двух разделенных списков для «ключей» и «значений» одинакового размера, если пары ключ-значение невозможны на выбранном вами языке).
- Вам разрешено выводить все возможные подпоследовательности с максимальной суммой вместо одной.
- Как видно из примеров, список ввода может содержать как отрицательные, так и дублированные значения. Можно предположить, что входные целые числа находятся в диапазоне .
- Выходной список не может быть пустым и всегда должен содержать хотя бы один элемент (если список будет содержать только отрицательные значения, то в качестве результата будет выведен список, содержащий единственное наименьшее отрицательное значение - см. Последние два теста).
- Если есть один возможный вывод, но для нескольких разных индексов, разрешается выводить оба из них, даже если они выглядят дубликатами. (т.е. приведенный выше пример может выводить
[[5,100,5],[5,100,5]]
обе возможные комбинации индексов).
Тестовые случаи:
Input: Possible outputs: At 0-based indices: With sum:
[1,2,3,-1,-3,2,5] [1,3,5] [0,2,6] 9
[4,5,4,3] [4,4]/[5,3] [0,2]/[1,3] 8
[5,5,10,100,10,5] [5,100,5] [0,3,5]/[1,3,5] 110
[10] [10] [0] 10
[1,1,1] [1,1] [0,2] 2
[-3,7,4,-2,4] [7,4] [1,4] 11
[1,7,4,-2] [7] [1] 7
[1,2,-3,-4,5,6,-7] [2,6] [1,5] 8
[800,-31,0,0,421,726] [800,726]/[800,0,726] [0,5]/[0,3,5]/[0,2,5] 1526
[-1,7,8,-5,40,40] [8,40] [2,4]/[2,5] 48
[-5,-18,-3,-1,-10] [-1] [3] -1
[0,-3,-41,0,-99,-2,0] [0]/[0,0]/[0,0,0] [0]/[3]/[6]/[0,3]/
[0,6],[3,6]/[0,3,6] 0
powerset
это набор подмножеств, не так ли? но похоже, что вы возвращаете набор подпоследовательностей? [4,5,4,3] привело бы к [4,4], где [4,4] явно не является набором.
[5,100,5]
дважды для вашего третьего примера.