Введение
Предположим, вы хотите вычислить максимумы хвоста списка чисел, то есть максимум каждого непустого суффикса. Один из способов сделать это состоит в том, чтобы повторно выбрать одно число и заменить его на большее число, встречающееся после него, до тех пор, пока это уже невозможно. В этой задаче ваша задача - выполнить один шаг этого алгоритма.
Задание
Ваш ввод представляет собой список целых чисел L , который может быть пустым. Ваш вывод должен быть списком L, где ровно одно число L i было заменено другим L j , где L i <L j и i <j .
Другими словами, вы должны заменить одно число на большее число, которое стоит после него.
Вы можете свободно выбирать i и j среди всех допустимых пар, и выбор может быть недетерминированным.
Если такие i и j не существуют (т. Е. L не увеличивается), ваш вывод должен быть L без изменений.
пример
Рассмотрим вход L = [3, 1, 4, -1, 2] . Возможные операции: заменить 3 на 4 , заменить 1 на 4 , заменить 1 на 2 или заменить -1 на 2 . Таким образом, возможными выходами являются:
[ 3 , 1 , 4 , -1 , 2 ]
------------------------------
[( 4), 1 ,( 4), -1 , 2 ]
[ 3 ,( 4),( 4), -1 , 2 ]
[ 3 ,( 2), 4 , -1 ,( 2)]
[ 3 , 1 , 4 ,( 2),( 2)]
Если вы повторите операцию достаточно много раз, то конечный результат будет [4,4,4,2,2] , что именно список хвостовых максимумов L .
Правила и оценки
Вы можете написать полную программу или функцию. В последнем случае вы можете изменить ввод вместо того, чтобы возвращать новый массив, если ваш язык это позволяет. Форматы ввода и вывода гибки в пределах разумного.
Побеждает самое низкое число байтов.
Контрольные примеры
Все возможные выходы показаны.
[] -> []
[1] -> [1]
[1,2] -> [2,2]
[2,1] -> [2,1]
[4,4,4,4] -> [4,4,4,4]
[-1,-3,-10] -> [-1,-3,-10]
[1,3,10] -> [3,3,10] [10,3,10] [1,10,10]
[1,1,2,1] -> [2,1,2,1] [1,2,2,1]
[998,64,2,-94,-789] -> [998,64,2,-94,-789]
[998,2,64,-94,-789] -> [998,64,64,-94,-789]
[3,1,4,-1,2] -> [4,1,4,-1,2] [3,4,4,-1,2] [3,2,4,-1,2] [3,1,4,2,2]
[-1,4,0,4,7,2,3] -> [4,4,0,4,7,2,3] [0,4,0,4,7,2,3] [-1,4,4,4,7,2,3] [7,4,0,4,7,2,3] [-1,7,0,4,7,2,3] [-1,4,7,4,7,2,3] [-1,4,0,7,7,2,3] [2,4,0,4,7,2,3] [-1,4,2,4,7,2,3] [3,4,0,4,7,2,3] [-1,4,3,4,7,2,3] [-1,4,0,4,7,3,3]
[3542,-12311,7662,1672,6081] -> [7662,-12311,7662,1672,6081] [3542,7662,7662,1672,6081] [3542,1672,7662,1672,6081] [6081,-12311,7662,1672,6081] [3542,6081,7662,1672,6081] [3542,-12311,7662,6081,6081]
x=>x.map(c=>c<x[++i]&!d?x[d=i]:c,d=i=0)
?