মান लीজিয়ে আমাদের কাছে একটি নন-এম্পটি ইন্টিজার অ্যারে আছে। আমাদের K-তম सर्वাধিক ফ্রিকোয়েন্ট উপাদানগুলো রিটার্ন করতে হবে। যেমন উপাদানগুলো [1,1,1,1,2,2,3,3,3] এবং k = 2 হলে ফলাফল হবে [1, 3]।
ফর্ম্যালি ফাংশনটি নিচের কাজটি করা উচিত:
- সত্য রিটার্ন করবে যদি i, j, k অস্তিত্বে থাকে
- যাতে
arr[i] < arr[j] < arr[k]হয়, দেওয়া0 ≤ i < j < k ≤ n-1অথবা মিথ্যা রিটার্ন করবে।
এটি সমাধানের ধাপগুলো:
num_freq= খালি ম্যাপ,freq_list:= খালি ম্যাপnums-এর প্রতিটি উপাদানiএর জন্য- যদি
inum_freq-এ না থাকে, তবেnum_freq[i] := 1, অন্যথায়num_freq[i]১ বাড়ান
- যদি
num_freqম্যাপের প্রতিটি কী-ভ্যালু জোড়ার জন্য- যদি ভ্যালু
freq_list-এ না থাকে, তবেfreq_list[value] := [key]বানান, অন্যথায়key-কেfreq_list[value]অ্যারেতে যোগ করুন
- যদি ভ্যালু
res:= খালি লিস্টi := nums-এর দৈর্ঘ্য থেকে ০ পর্যন্ত- যদি
ifreq_list-এ থাকে, তবেfreq_list[i]-এর উপাদানগুলোres-এ যোগ করুন - যদি
res-এর দৈর্ঘ্যk-এর চেয়ে বড় বা সমান হয়, তবে ব্রেক করুন
- যদি
resultরিটার্ন করুন
নিচে ইমপ্লিমেন্টেশন দেওয়া হলো:
উদাহরণ
class Solution(object):
def topKFrequent(self, nums, k):
number_frequency = {}
frequency_list = {}
for i in nums:
if i not in number_frequency:
number_frequency[i] = 1
else:
number_frequency[i] += 1
for key, value in number_frequency.items():
if value not in frequency_list:
frequency_list[value] = [key]
else:
frequency_list[value].append(key)
result = []
for i in range(len(nums), 0, -1):
if i in frequency_list:
result.extend(frequency_list[i])
if len(result) >= k:
break
return result
ob1 = Solution()
print(ob1.topKFrequent([1,1,1,1,2,2,3,3,3], 2))
ইনপুট
[1,1,1,1,2,2,3,3,3] 2
আউটপুট
[1, 3]