সমস্যা বিবরণ
দুটি অ্যারে 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]
সমাধানের পদ্ধতি
- arr1-এর উপাদানগুলো ফ্রিকোয়েন্সি ম্যাপে (ডিকশনারি) সংরক্ষণ করুন।
- arr2-এর কræমে প্রতিটি উপাদান তার ফ্রিকোয়েন্সি অনুযায়ী রেজাল্টে যোগ করুন এবং ফ্রিকোয়েন্সি ০ করুন।
- বचे हुए উপাদানগুলো (ফ্রিকোয়েন্সি > ০) কালেক্ট করুন, সর্ট করে রেজাল্টের শেষে যোগ করুন।
পাইথন উদাহরণ
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