मान लीजिए कि हमारे पास एक धनात्मक पूर्णांक 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' हो और झंडा, तब
- एस:=मैं
- यदि अधिकतम
- अधिकतम:=|एस-सी|
- सी:=एस
- अगर K[i] '1' है और C 0 है और झंडा गलत है, तो
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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