Computer >> Máy Tính >  >> Lập trình >> Python

Hoán vị trước với một lần hoán đổi trong Python

Giả sử chúng ta có một mảng A gồm các số nguyên dương (không nhất thiết là duy nhất), chúng ta phải tìm hoán vị lớn nhất về mặt từ vựng nhỏ hơn A, hoán vị có thể được thực hiện bằng một lần hoán đổi (A hoán vị trao đổi vị trí của hai số A [i] và A [j]). Nếu không thể, hãy trả về cùng một mảng. Vì vậy, nếu mảng giống như [3,2,1], thì đầu ra sẽ là [3,1,2], bằng cách hoán đổi 2 và 1

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution(object):
   def prevPermOpt1(self, A):
      n = len(A)
      for left in range(n-2,-2,-1):
         if left == -1:
            return A
         elif A[left]>A[left+1]:
            break
      element = 0
      index = 0
      for right in range(left+1,n):
         if A[right]<A[left] and A[right]>element:
            element = A[right]
            index = right
      temp = A[left]
      A[left] = A[index]
      A[index] = temp
      return A
ob = Solution()
print(ob.prevPermOpt1([4,2,3,1,3]))

Đầu vào

[4,2,3,1,3]

Đầu ra

[4, 2, 1, 3, 3]