কম্পিউটার টিউটোরিয়াল

পাইথনে রিলেটিভ সর্ট অ্যারে (Relative Sort Array in Python)


সমস্যা বিবরণ

দুটি অ্যারে arr1 এবং arr2 দেওয়া আছে। arr2-এর উপাদানগুলো ইউনিক এবং arr1-এ উপস্থিত। arr1 কে সাজাতে হবে যাতে arr2-এর النسبিক অর্ডার মেনটেইন থাকে। arr2-এ নেই এমন উপাদানগুলো arr1-এ শেষে আসেন্ডিং অর্ডারে রাখতে হবে।

উদাহরণ: arr1=[2,3,1,3,2,4,6,7,9,2,19], arr2=[2,1,4,3,9,6] → আউটপুট: [2,2,2,1,4,3,3,9,6,7,19]

সমাধানের পদ্ধতি

  1. arr1-এর উপাদানগুলো ফ্রিকোয়েন্সি ম্যাপে (ডিকশনারি) সংরক্ষণ করুন।
  2. arr2-এর কræমে প্রতিটি উপাদান তার ফ্রিকোয়েন্সি অনুযায়ী রেজাল্টে যোগ করুন এবং ফ্রিকোয়েন্সি ০ করুন।
  3. বचे हुए উপাদানগুলো (ফ্রিকোয়েন্সি > ০) কালেক্ট করুন, সর্ট করে রেজাল্টের শেষে যোগ করুন।

পাইথন উদাহরণ

class Solution(object):
    def relativeSortArray(self, arr1, arr2):
        freq = {}
        for num in arr1:
            freq[num] = freq.get(num, 0) + 1
        
        res = []
        for num in arr2:
            res.extend([num] * freq[num])
            freq[num] = 0
        
        remaining = []
        for num, count in freq.items():
            if count > 0:
                remaining.extend([num] * count)
        remaining.sort()
        res.extend(remaining)
        return res

ob1 = Solution()
print(ob1.relativeSortArray([2,3,1,3,2,4,6,7,9,2,19], [2,1,4,3,9,6]))

ইনপুট

[2,3,1,3,2,4,6,7,9,2,19] [2,1,4,3,9,6]

আউটপুট

[2, 2, 2, 1, 4, 3, 3, 9, 6, 7, 19]

Counter ব্যবহার করে সংক্ষিপ্ত

from collections import Counter

def relativeSortArray(arr1, arr2):
    freq = Counter(arr1)
    res = []
    for num in arr2:
        res.extend([num] * freq.pop(num, 0))
    for num in sorted(freq):
        res.extend([num] * freq[num])
    return res
  1. পাইথনে মার্জ সর্ট (Merge Sort) ব্যাখ্যা

  2. কাউন্টিং সর্টের পাইথন প্রোগ্রাম

  3. পাইথনে ইনসারশন সর্ট প্রোগ্রাম

  4. পাইথন প্রোগ্রাম: ইনসারশন সোর্ট অ্যালগরিদম