介绍
假设您要计算数字列表的尾部最大值,即每个非空后缀的最大值。一种方法是重复选择一个数字,然后用后面出现的更大的数字代替,直到不可能为止。在这一挑战中,您的任务是执行此算法的一个步骤。
任务
您的输入是一个整数列表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)
?