
smallest Permutation
Cho một số nguyên n
và một dãy số a
với tính chất dãy a
là một dãy con của một hoán vị n
phần tử.
- Một dãy
p(1), p(2), ..., p(n)
được gọi là một hoán vịn
phần tử nếu như các số từ1
đếnn
sẽ xuất hiện trongp
chính xác1
lần.
Ví dụ: vớin = 3
thì dãy{1, 3, 2}
được gọi là hoán vịn
phần tử nhưng{1, 2, 2}
thì không. - Dãy con (subsequences) là một dãy có thể được tạo ra từ dãy ban đầu bằng cách xóa đi một số phần tử hoặc không phần tử nào mà không thay đổi thứ tự của các phần tử còn lại.
Ví dụ: Với dãy ban đầu là{1, 3, 4, 2, 5}
thì{1, 4, 2}
là dãy con nhưng{1, 2, 4}
thì không là dãy con. - Xét
2
dãyA, B
có cùng độ dàin
thì dãyA
được coi là dãy có thứ tự nhỏ hơn dãyB
nếu tồn tại sốk (1 <= k <= n)
sao cho:- Với mọi
i
từ1
đến(k - 1)
thìA(i) = B(i)
A(k) < B(k)
Ví dụ:{1, 3, 4, 2, 5}
nhỏ hơn{1, 3, 5, 4, 2}
vớik = 3
- Với mọi
Hãy tìm dãy hoán vị n
phần tử mà chứa dãy a
là một dãy con, nếu có nhiều đáp án thì tìm dãy hoán vị có thứ tự từ điển nhỏ nhất.
Ví dụ:
- Với
n=5, a=[1,4,2]
thìsmallestPermutation(n, a) = [1,3,4,2,5]
Giải thích: Các dãy hoán vịn
phần tử theo thứ tự từ điển tăng dần sẽ chứa dãy{1, 4, 2}
là dãy con là{1, 3, 4, 2, 5}
-> Đáp án{1, 3, 4, 5, 2}
{1, 3, 5, 4, 2}
{1, 5, 3, 4, 2}
{3, 1, 4, 2, 5}
...............
{5, 3, 1, 4, 2}
-> Dãy có thứ tự từ điển lớn nhất
Đầu vào/Đầu ra:
- [Giới hạn thời gian chạy]: 0.5 giây với C++, 3 giây với Java và C#, 4s với Python, GO và Js.
- [Đầu vào] Integer n
2 <= n <= 1000
- [Đầu vào] Array of Integer a
1 <= a.length <= n
1 <= a[i] <= n
Dữ liệu dảm bảo các số tronga
đều phân biệt - [Đầu ra] array.integer
Dãy hoán vịn
phần tử cần tìm.
Post Comment