Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में समतुल्य आवृत्तियों वाले अनुक्रम को खोजने का प्रोग्राम

मान लीजिए हमारे पास संख्याओं की एक सूची है। हमें संख्याओं के सबसे लंबे अनुक्रम की लंबाई ज्ञात करनी है जैसे कि जब हम अनुक्रम से एक संख्या हटाते हैं, तो प्रत्येक संख्या समान संख्या में होती है।

इसलिए, यदि इनपुट numbers = [2, 4, 4, 7, 7, 6, 6] है, तो आउटपुट 7 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

  • num_freq := एक नया मैप

  • freq_freq := एक नया मैप

  • diff_freq := एक नया सेट

  • result := 1

  • प्रत्येक इंडेक्स I और मान num के लिए nums में, करें:

    • 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 का आकार 1 के समान है, तो:

      • result := i + 1

    • अन्यथा जब df_list का आकार 2 के समान है, और (जब कोई भी [|freq_freq[df_list[0]] - freq_freq[df_list[1]]|, freq_freq[df_list[0]], freq_freq[df_list[1]]) 1 है), और (जब कोई भी [|df_list[0] - df_list[1]|, df_list[0], df_list[1]]) 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. पायथन में जांचें कि ग्राफ सभी द्वारा पारगम्य है या नहीं पायथन में जांचें कि ग्राफ सभी द्वारा पारगम्य है या नहीं

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्ष हैं जो 0 से n-1 तक क्रमांकित हैं। ग्राफ अनिर्देशित है और प्रत्येक किनारे का एक भार है। ग्राफ में तीन प्रकार के भार हो सकते हैं और प्रत्येक भार एक विशेष कार्य को दर्शाता है। दो लोग हैं जो ग्राफ को पार कर सकते हैं, अर्थात् जैक और केसी। जैक ग्राफ को

  1. - पायथन प्रोग्राम - टुपल्स की सूची में पॉजिटिव एलिमेंट वाले टुपल्स खोजें

    जब टुपल्स की सूची में पॉजिटिव एलिमेंट वाले टुपल्स खोजने हों, तो लिस्ट कॉम्प्रिहेंशन और all ऑपरेटर का उपयोग किया जाता है। उदाहरण नीचे इसका प्रदर्शन दिया गया है: = 0 for element in sub)] print(परिणाम है:) print(my_result) आउटपुट सूची है: [(14, 15, 19), (-32, 23, 32), (-31, 15, 63), (46, 68)] परिणाम

  1. Python से दो एक्सप्रेशन ट्रीज़ के इक्विवेलेंट होने की जांच कैसे करें? Python से दो एक्सप्रेशन ट्रीज़ के इक्विवेलेंट होने की जांच कैसे करें?

    दोनों ट्रीज़ के लीफ नोड्स (ऑपरेंड्स) की फ्रीक्वेंसी काउंट करके तुलना करें: अगर समान तो ट्रीज़ इक्विवेलेंट हैं। एल्गोरिदम DFS से प्रत्येक ट्री के लीफ नोड्स (ऑपरेंड्स) की फ्रीक्वेंसी Counter में गिनें। दोनों काउंटर्स तुलना करें: dic1 == dic2। ऑपरेटर्स को इग्नोर करें, केवल ऑपरेंड्स मैटर करते हैं (कम्य