소개
숫자 목록의 꼬리 최대 값, 즉 비어 있지 않은 각 접미어의 최대 값을 계산한다고 가정합니다. 이를 수행하는 한 가지 방법은 더 이상 가능하지 않을 때까지 하나의 숫자를 반복해서 선택하고 그 뒤에 나오는 더 높은 숫자로 바꾸는 것입니다. 이 도전에서, 당신의 임무는이 알고리즘의 한 단계를 수행하는 것입니다.
작업
입력 값은 정수 L 의 목록이며 비어있을 수 있습니다. 정확히 하나의 숫자 L i 가 다른 L j 로 대체 된 목록 L 이됩니다 . 여기서 L i <L j 및 i <j 입니다.
다시 말해, 하나의 숫자를 그 뒤에 나오는 숫자로 교체해야합니다.
당신은 선택할 수 있습니다 I 와 J를 모든 유효한 쌍 중 자유롭게, 그리고 선택은 결정적이 될 수 있습니다.
이러한 경우 내가 및 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)?