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

पायथन में बाइनरी गैप

मान लीजिए कि हमारे पास एक धनात्मक पूर्णांक N है, तो हमें N के द्विआधारी निरूपण में दो क्रमागत 1 के बीच की सबसे लंबी दूरी ज्ञात करनी होगी। यदि कोई दो-लगातार 1 नहीं हैं, तो 0 पर लौटें।

इसलिए, यदि इनपुट 22 की तरह है, तो आउटपुट 2 होगा, क्योंकि बाइनरी में 22 10110 है। 22 के बाइनरी प्रतिनिधित्व में तीन हैं, और 1 के लगातार दो जोड़े हैं। 1 की लगातार पहली जोड़ी की दूरी 2 है, फिर 1 की लगातार दूसरी जोड़ी की दूरी 1 है। उत्तर इन दो दूरियों में सबसे बड़ा होगा, जो 2 है।

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

  • K :=N के द्विआधारी प्रतिनिधित्व के बिट्स की सूची बनाएं
  • अधिकतम:=0, सी:=0, एस:=0
  • झंडा :=झूठा
  • i के लिए 0 से K के आकार की श्रेणी में, करें
    • अगर K[i] '1' है और C 0 है और झंडा गलत है, तो
      • सी:=मैं
      • झंडा :=सच
    • अन्यथा जब K[i] '1' हो और झंडा, तब
      • एस:=मैं
      • यदि अधिकतम
      • अधिकतम:=|एस-सी|
    • सी:=एस
  • अधिकतम वापसी
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    class Solution:
       def binaryGap(self, N):
          B = bin(N).replace('0b','')
          K = str(B)
          K = list(K)
          Max = 0
          C = 0
          S =0
          Flag =False
          for i in range(len(K)):
             if K[i] is '1' and C is 0 and Flag is False:
                C=i
             Flag = True
             elif K[i] is '1' and Flag:
                S=i
                if Max<abs(S-C):
                   Max = abs(S-C)
                   C=S
          return Max
    ob = Solution()
    print(ob.binaryGap(22))

    इनपुट

    22

    आउटपुट

    2

    1. ज़िगज़ैग में पथ पायथन में बाइनरी ट्री लेबल किया गया

      मान लीजिए कि एक अनंत बाइनरी ट्री में जहां प्रत्येक नोड में दो बच्चे होते हैं, नोड्स को पंक्ति क्रम में लेबल किया जाता है। अब विषम संख्या वाली पंक्तियों (पहली, तीसरी, पाँचवीं,...) में, लेबलिंग बाएँ से दाएँ होती है, और सम संख्या वाली पंक्तियों (दूसरी, चौथी, छठी,...) में, लेबलिंग दाएँ से बाएँ होती है .

    1. पायथन में बाइनरी ट्री का व्यास

      मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें पेड़ के व्यास की लंबाई की गणना करनी है। बाइनरी ट्री का व्यास वास्तव में एक पेड़ में किन्हीं दो नोड्स के बीच सबसे लंबे पथ की लंबाई है। जरूरी नहीं कि यह रास्ता जड़ से ही गुजरे। तो अगर पेड़ नीचे जैसा है, तो व्यास 3 होगा क्योंकि पथ की लंबाई [4,2,1,3] या [5,2,1

    1. पायथन में बाइनरी ट्री को उल्टा करें

      मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमारा काम एक उल्टा बाइनरी ट्री बनाना है। तो अगर पेड़ नीचे जैसा है - उल्टा पेड़ इस तरह होगा इसे हल करने के लिए, हम एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे यदि रूट शून्य है, तो वापस आएं बाएं और दाएं पॉइंटर्स को स्वैप करें बाएं सबट्री और राइट सबट्री को द