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

পাইথনে সমান ফ্রিকোয়েন্সি বিশিষ্ট সিকোয়েন্স খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের একটি সংখ্যার তালিকা রয়েছে। আমাদের এমন সবচেয়ে বড় সিকোয়েন্সের দৈর্ঘ্য খুঁজে বের করতে হবে যাতে সিকোয়েন্স থেকে একটি সংখ্যা মুছে দিলে প্রতিটি সংখ্যা একই বার 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] + 1
    • freq_freq[cur_freq] := freq_freq[cur_freq] - 1
    • freq_freq[cur_freq + 1] := freq_freq[cur_freq + 1] + 1
    • cur_freq + 1 কে diff_freq তে যোগ করুন
    • যদি cur_freq diff_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
  1. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

  2. পাইথনে কনফ্লিক্ট-ফ্রি 베স্ট টিম খুঁজে বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম - টাপল তালিকা থেকে ধনাত্মক উপাদানযুক্ত টাপল বের করা

  4. Python দিয়ে দুটি এক্সপ্রেশন ট্রি সমতুল্য কিনা চেক করার প্রোগ্রাম