একটি অ্যারে দেওয়া আছে যাতে এলিমেন্টগুলো একাধিকবার থাকতে পারে। অ্যারেটি সর্ট করতে হবে যাতে এলিমেন্টগুলো তাদের ফ্রিকোয়েন্সির বৃদ্ধমান ক্রমে সাজে। যেটা কমবার আছে সেটা আগে আসবে।
ইনপুট: nums = [1,5,3,1,3,1,2,5] → আউটপুট: [2, 5, 5, 3, 3, 1, 1, 1]।
সমাধানের ধাপসমূহ
mp := ম্যাপ (ফ্রিকোয়েন্সি → এলিমেন্ট লিস্ট)
প্রতিটি ডISTINCT এলিমেন্ট i ∈ nums-এর জন্য:
- x = nums.count(i)
- mp[x].append(i)
ans := []
mp-এর কীগুলো সর্ট করে (ফ্রিকোয়েন্সি অনুযায়ী):
- mp[i]-কে ডিসেন্ডিং সর্ট করুন (এলিমেন্ট বড় হলে আগে)
- প্রতিটি j ∈ mp[i]-এর জন্য: ans-এ j কে i বার অ্যেন্ড করুন
ans রিটার্ন করুন
উদাহরণ (Python)
def solve(nums):
mp = {}
for i in set(nums):
x = nums.count(i)
try:
mp[x].append(i)
except:
mp[x] = [i]
ans = []
for i in sorted(mp):
for j in sorted(mp[i], reverse=True):
ans.extend([j] * i)
return ans
nums = [1, 5, 3, 1, 3, 1, 2, 5]
print(solve(nums))
ইনপুট
[1,5,3,1,3,1,2,5]
আউটপুট
[2, 5, 5, 3, 3, 1, 1, 1]