मान लीजिए कि हमारे पास एक संख्या एन है, हमें इसके द्विआधारी प्रतिनिधित्व में लगातार दो 1 के बीच की सबसे लंबी दूरी का पता लगाना है। अगर कोई दो लगातार 1 नहीं हैं, तो 0 लौटाएं।
इसलिए, यदि इनपुट 71 की तरह है, तो आउटपुट 4 होगा, क्योंकि बाइनरी में 71 1000111 है। अब चार हैं, और पहला 1 और दूसरा 1 दूरी पर है। अन्य सभी एक दूरी पर हैं। यहां सबसे लंबी दूरी 4 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
के:=एन के बाइनरी प्रतिनिधित्व के बिट्स की सूची बनाएं
-
अधिकतम:=0, सी:=0, एस:=0
-
झंडा :=झूठा
-
मेरे लिए 0 से K के आकार की सीमा में, करें
-
अगर K[i] '1' है और C 0 है और झंडा गलत है, तो
-
सी:=मैं
-
झंडा :=सच
-
-
अन्यथा जब K[i] '1' और ध्वज हो, तब
-
एस:=मैं
-
अगर मैक्स
-
अधिकतम:=|एस-सी|
-
-
सी:=एस
-
-
-
वापसी अधिकतम
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(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 n = 71 print(solve(n))
इनपुट
71
आउटपुट
4