도전
비어 있지 않은 정수 배열을 예로 들면 :
[5, 2, 7, 6, 4, 1, 3]
먼저 이전보다 큰 항목이없는 배열 (예 : 비 오름차순 배열)로 분할하십시오.
[5, 2] [7, 6, 4, 1] [3]
다음으로 각 배열을 반대로 바꿉니다.
[2, 5] [1, 4, 6, 7] [3]
마지막으로, 그것들을 모두 함께 연결하십시오 :
[2, 5, 1, 4, 6, 7, 3]
이것은 프로그램 출력 / 함수가 반환하는 것이어야합니다. 이 절차를 충분히 반복하면 배열이 완전히 정렬됩니다.
규칙
- 입력 및 출력은 표준 방법을 통해 제공 될 수 있으며 합리적인 배열 형식 일 수 있습니다.
- 입력 배열은 절대 비어 있지 않지만 음수 및 / 또는 중복이 포함될 수 있습니다.
- 각 정수의 절대 값은 항상 2 31 미만 입니다.
테스트 사례
바라건대 이들은 모든 에지 케이스를 다룹니다.
[1] -> [1]
[1, 1] -> [1, 1]
[1, 2] -> [1, 2]
[2, 1] -> [1, 2]
[2, 3, 1] -> [2, 1, 3]
[2, 1, 3] -> [1, 2, 3]
[2, 1, 2] -> [1, 2, 2]
[2, 1, 1] -> [1, 1, 2]
[3, 1, 1, 2] -> [1, 1, 3, 2]
[3, 2, 1, 2] -> [1, 2, 3, 2]
[3, 1, 2, 2] -> [1, 3, 2, 2]
[1, 3, 2, 2] -> [1, 2, 2, 3]
[1, 0, 5, -234] -> [0, 1, -234, 5]
[1, 0, 1, 0, 1] -> [0, 1, 0, 1, 1]
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
[5, 4, 3, 2, 1] -> [1, 2, 3, 4, 5]
[2, 1, 5, 4, 3] -> [1, 2, 3, 4, 5]
[2, 3, 1, 5, 4] -> [2, 1, 3, 4, 5]
[5, 1, 4, 2, 3] -> [1, 5, 2, 4, 3]
[5, 2, 7, 6, 4, 1, 3] -> [2, 5, 1, 4, 6, 7, 3]
[-5, -2, -7, -6, -4, -1, -3] -> [-5, -7, -2, -6, -4, -3, -1]
[14, 5, 3, 8, 15, 7, 4, 19, 12, 0, 2, 18, 6, 11, 13, 1, 17, 16, 10, 9] -> [3, 5, 14, 8, 4, 7, 15, 0, 12, 19, 2, 6, 18, 11, 1, 13, 9, 10, 16, 17]
채점
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
O(n^2)
O(n)
. 중간 지점에 도착하면 첫 번째 요소와 마지막 요소를 바꾼 다음 두 번째 요소와 두 번째 요소를 바꿉니다.
O(n)
알고리즘에 리버스를 내장 할 수 있습니다 (JS 답변이하는 것입니다). 각 반복은 배열의 각 항목을 한 번 반복하므로 단일 반복은 O(n)
입니다. (제 생각에는 ...)