ধরুন আমাদের কাছে ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে রয়েছে (অগত্যা অনন্য নয়), আমাদের অভিধানগতভাবে সবচেয়ে বড় স্থানচ্যুতি খুঁজে বের করতে হবে যা A থেকে ছোট, যেটি একটি অদলবদল করে তৈরি করা যেতে পারে (A অদলবদল দুটি সংখ্যা A[i] এর অবস্থান বিনিময় করে এবং A[j])। যদি এটি সম্ভব না হয়, তাহলে একই অ্যারে ফেরত দিন। সুতরাং যদি অ্যারেটি [3,2,1] এর মত হয়, তাহলে আউটপুট হবে [3,1,2], 2 এবং 1 অদলবদল করে
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=A এর আকার
- রেঞ্জ n – 2 থেকে নিচে -1
- -এ বাম
- বামে থাকলে =-1, তারপর A ফেরত দিন, অন্যথায় যখন A[left]> A[left + 1], তারপর বিরতি দিন
- উপাদান :=0, সূচক :=0
- রেঞ্জে ডানের জন্য বাম + 1 থেকে n
- যদি A[ডান] উপাদান, তাহলে
- এলিমেন্ট =A[ডান]
- সূচী :=ডান
- যদি A[ডান] উপাদান, তাহলে
- অদলবদল A[বাম] এবং A[সূচী]
- রিটার্ন A
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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]))
ইনপুট
[4,2,3,1,3]
আউটপুট
[4, 2, 1, 3, 3]