ধরুন আমাদের একটি সংখ্যার তালিকা রয়েছে। আমাদের এমন সবচেয়ে বড় সিকোয়েন্সের দৈর্ঘ্য খুঁজে বের করতে হবে যাতে সিকোয়েন্স থেকে একটি সংখ্যা মুছে দিলে প্রতিটি সংখ্যা একই বার número হয়।
উদাহরণস্বরূপ, ইনপুট numbers = [2, 4, 4, 7, 7, 6, 6] হলে আউটপুট হবে 7।
সমাধানের ধাপসমূহ
num_freq:= একটি নতুন মানচিত্র (নাম্বারের ফ্রিকোয়েন্সি সংরক্ষণের জন্য)freq_freq:= একটি নতুন মানচিত্র (ফ্রিকোয়েন্সির ফ্রিকোয়েন্সি সংরক্ষণের জন্য)diff_freq:= একটি নতুন সেট (বিভিন্ন ফ্রিকোয়েন্সি রাখার জন্য)result := 1- তালিকার প্রতিটি সূচক
iএবং মানnumএর জন্য:cur_freq := num_freq[num]num_freq[num] := num_freq[num] + 1freq_freq[cur_freq] := freq_freq[cur_freq] - 1freq_freq[cur_freq + 1] := freq_freq[cur_freq + 1] + 1cur_freq + 1কেdiff_freqতে যোগ করুন- যদি
cur_freqdiff_freq-এ থাকে এবংfreq_freq[cur_freq] == 0হয়, তবেcur_freqকেdiff_freqথেকে মুছে দিন df_list := diff_freqএর উপাদান들 দিয়ে একটি নতুন তালিকা তৈরি করুন- যদি
df_listএর আকার ১ হয়, তবেresult := i + 1 - অন্যথায়, যদি
df_listএর আকার ২ হয় এবং নিচের শর্তগুলো পূরণ হয়:|freq_freq[df_list[0]] - freq_freq[df_list[1]]|,freq_freq[df_list[0]], বাfreq_freq[df_list[1]]এর যেকোনো একটি ১ হয়|df_list[0] - df_list[1]|,df_list[0], বাdf_list[1]এর যেকোনো একটি ১ হয়
result := i + 1
resultফেরত দিন
উদাহরণ
from collections import defaultdict
class Solution:
def solve(self, nums):
num_freq = defaultdict(int)
freq_freq = defaultdict(int)
diff_freq = set()
result = 1
for i, num in enumerate(nums):
cur_freq = num_freq[num]
num_freq[num] += 1
freq_freq[cur_freq] -= 1
freq_freq[cur_freq + 1] += 1
diff_freq.add(cur_freq + 1)
if cur_freq in diff_freq and freq_freq[cur_freq] == 0:
diff_freq.remove(cur_freq)
df_list = list(diff_freq)
if len(df_list) == 1:
result = i + 1
elif (
len(df_list) == 2
and any(
x == 1
for x in [
abs(freq_freq[df_list[0]] - freq_freq[df_list[1]]),
freq_freq[df_list[0]],
freq_freq[df_list[1]],
]
)
and any(x == 1 for x in [abs(df_list[0] - df_list[1]), df_list[0], df_list[1]])
):
result = i + 1
return result
ob = Solution()
print(ob.solve([2, 4, 4, 7, 7, 6, 6]))
ইনপুট
numbers = [2, 4, 4, 7, 7, 6, 6]
আউটপুট
7