Menu
CoddyTech

Next Permutation

Bạn nhận được một mảng (array) số nguyên nums, các giá trị có thể lặp lại. Hãy hình dung tất cả các cách sắp xếp khác nhau của những giá trị này, được xếp theo thứ tự từ điển: so sánh hai cách sắp xếp tại chỉ số đầu tiên mà chúng khác nhau, cách có giá trị nhỏ hơn ở đó sẽ đứng trước. Trả về cách sắp xếp đứng ngay sau nums theo thứ tự đó.

Nếu nums đã là cách sắp xếp lớn nhất, thì không có cách nào đứng sau nó: hãy trả về cách nhỏ nhất, tức là các giá trị được sắp xếp theo thứ tự tăng dần. Cố gắng đạt thời gian O(n) và bộ nhớ bổ sung O(1).

Hàm

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
cách sắp xếp các giá trị hiện tại
Trả vềinteger-array
sắp xếp tiếp theo theo thứ tự từ điển, hoặc các giá trị được sắp xếp theo thứ tự tăng dần nếu nums là lớn nhất

Ràng buộc

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 1000

Ví dụ

Đầu vào
nums = [2, 5, 4, 1]
Đầu ra
[4, 1, 2, 5]
Giải thích
Đuôi 5, 4, 1 đang giảm, nên số 2 đứng trước nó phải tăng lên. Giá trị nhỏ nhất trong đuôi lớn hơn 2 là 4; đặt 2 vào vị trí đó rồi sắp xếp phần còn lại theo thứ tự tăng dần: [4, 1, 2, 5].
challenge icon

Câu hỏi mở rộng

Làm thế nào để bạn tìm cách sắp xếp trước đó, cách sắp xếp đứng ngay trước nums theo thứ tự từ điển?

Đặt lại code
def nextPermutation(nums):
    # Viết code tại đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

nums = [2, 5, 4, 1]

Đầu ra mong đợi

[4, 1, 2, 5]