Hướng dẫn next permutation interviewbit solution python - hoán vị tiếp theo giải pháp phỏng vấn bit giải pháp python

Permalink

Không thể lấy lại những người đóng góp tại thời điểm này

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

Giải pháp lớp học:
# @param A: Danh sách số nguyên
# @return cùng một danh sách số nguyên sau khi sửa đổi
DEF NEXTPERMUNT [tự, A]:
i = len [a] - 2
Trong khi A [i]> = a [i+1]:
i = i - 1
Nếu tôi A[idx]
  • Trao đổi A [IDX] và A [Ind].A[idx] and A[ind].
  • Đảo ngược mảng từ IDX + 1 cho đến N.idx + 1 till the end of the array.
  • Trường hợp cơ sở sẽ là, nếu mảng theo thứ tự giảm, sẽ không tìm thấy hoán vị tiếp theo, do đó trả lại mảng theo thứ tự được sắp xếp.

    Thực hiện phương pháp:
    So, if we traverse from the end of the array, there will be an index where the current element is smaller than the previous element. This ensures that all the elements to its right are larger than the current element.
    Now, to get the next greater arrangement, the most optimal approach would be to find the element which is just greater than the current found element.

    Vì vậy, bây giờ sau khi hoán đổi, chúng tôi đã tìm thấy yếu tố trục. Nhưng chúng tôi vẫn chưa có hoán vị cần thiết. Do đó, chỉ cần sắp xếp các yếu tố từ trục cho đến cuối để có được hoán vị cần thiết.

    Ví dụ sau đây sẽ làm cho cách tiếp cận rõ ràng hơn.

    Thuật toán:

    Thực hiện phương pháp:

    Mã C ++

    void nextPermutation[vector < int > & nums] {
      int n = nums.size[], k, l;
      for [k = n - 2; k >= 0; k--] {
        if [nums[k] < nums[k + 1]] {
          break;
        }
      }
      if [k < 0] {
        reverse[nums.begin[], nums.end[]];
      } else {
        for [l = n - 1; l > k; l--] {
          if [nums[l] > nums[k]] {
            break;
          }
        }
        swap[nums[k], nums[l]];
        reverse[nums.begin[] + k + 1, nums.end[]];
      }
    }

    Mã Java

     public void nextPermutation[int[] A] {
      if [A == null || A.length = 0 && A[i] >= A[i + 1]] i--; 
      if [i >= 0] { 
        int j = A.length - 1; 
        while [A[j]  0 and nums[i - 1] >= nums[i]:
            i -= 1
        if i == 0:
            nums.reverse[]
            return
        k = i - 1
        while nums[j] 

    Chủ Đề