Thử thách
Cho một mảng số nguyên không trống, ví dụ:
[5, 2, 7, 6, 4, 1, 3]
Đầu tiên cắt nó thành các mảng trong đó không có mục nào lớn hơn các mảng trước (tức là các mảng không tăng dần):
[5, 2] [7, 6, 4, 1] [3]
Tiếp theo, đảo ngược từng mảng:
[2, 5] [1, 4, 6, 7] [3]
Cuối cùng, nối tất cả chúng lại với nhau:
[2, 5, 1, 4, 6, 7, 3]
Đây phải là những gì chương trình đầu ra / chức năng của bạn trả về. Lặp lại thủ tục này đủ số lần và mảng sẽ được sắp xếp đầy đủ.
Quy tắc
- Đầu vào và đầu ra có thể được cung cấp thông qua bất kỳ phương pháp tiêu chuẩn nào, và có thể ở bất kỳ định dạng mảng hợp lý nào.
- Mảng đầu vào sẽ không bao giờ trống, nhưng có thể chứa các phủ định và / hoặc trùng lặp.
- Giá trị tuyệt đối của mỗi số nguyên sẽ luôn nhỏ hơn 2 31 .
Các trường hợp thử nghiệm
Hy vọng những điều này bao gồm tất cả các trường hợp cạnh:
[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]
Chấm điểm
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.
O(n^2)
O(n)
. hoán đổi các yếu tố đầu tiên và cuối cùng sau đó trao đổi các yếu tố cuối cùng thứ hai và thứ hai, vv, khi bạn đến điểm dừng giữa.
O(n)
, nhưng đảo ngược có thể được xây dựng ngay trong thuật toán (đó là những gì câu trả lời JS của tôi làm); vì mỗi vòng lặp lặp trên mỗi mục trong mảng một lần, nên một lần lặp duy nhất là O(n)
. (Tôi nghĩ rằng ...)