ধরুন, আমাদের কাছে nums নামক একটি অ্যারে আছে এবং আমাদেরকে সংখ্যাগুলিকে ক্রমবর্ধমান বা ক্রমানুসারে সাজানোর জন্য প্রয়োজনীয় অদলবদল সংখ্যা খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি nums =[2, 5, 6, 3, 4] এর মত হয়, তাহলে আউটপুট হবে 2 কারণ প্রাথমিকভাবে সংখ্যাগুলিতে [2, 5, 6, 3, 4] আছে। আমরা যদি 6 এবং 4 নম্বর অদলবদল করি, তাহলে অ্যারে হবে [2,5,4,3,6]। তারপর, যদি আমরা 5 এবং 3 নম্বরগুলি অদলবদল করি, তাহলে অ্যারে হবে [2,3,4,5,6]। তাই অ্যারেটিকে আরোহী ক্রমে সাজানোর জন্য 2টি অদলবদল প্রয়োজন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন swap_count() সংজ্ঞায়িত করুন। এটি input_arr
- নেবে
- pos :=input_arr-এ প্রতিটি আইটেমের জন্য tuples (item_postion, item) ধারণকারী নতুন তালিকা
- input_arr-এ থাকা আইটেম অনুযায়ী তালিকার অবস্থান বাছাই করুন
- cnt :=0
- রেঞ্জ 0 থেকে input_arr এর আকারের জন্য, করুন
- যদিও সত্য, কর
- যদি pos[index, 0] সূচকের মতো হয়, তাহলে
- লুপ থেকে প্রস্থান করুন
- অন্যথায়,
- cnt :=swap_count + 1
- swap_index :=pos[index, 0]
- (pos[index], pos[swap_index]) এর মানগুলি অদলবদল করুন
- যদি pos[index, 0] সূচকের মতো হয়, তাহলে
- যদিও সত্য, কর
- cnt ফেরত
- প্রধান ফাংশন/পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন −
- নূন্যতম রিটার্ন করুন (swap_count(input_arr) , swap_count(input_arr বিপরীত ক্রমে))
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def swap_count(input_arr): pos = sorted(list(enumerate(input_arr)), key=lambda x: x[1]) cnt = 0 for index in range(len(input_arr)): while True: if (pos[index][0] == index): break else: cnt += 1 swap_index = pos[index][0] pos[index], pos[swap_index] = pos[swap_index], pos[index] return cnt def solve(input_arr): return min(swap_count(input_arr), swap_count(input_arr[::-1])) nums = [2, 5, 6, 3, 4] print(solve(nums))
ইনপুট
[2, 5, 6, 3, 4]
আউটপুট
2