मान लीजिए हमारे पास एक संख्या n है; हमें बाइनरी रूप में n के समान संख्या 1s के साथ सबसे छोटी अगली उच्च संख्या ज्ञात करनी होगी।
इसलिए, यदि इनपुट n =7 जैसा है, तो आउटपुट 11 होगा, क्योंकि बाइनरी में 7 0111 है और तीन के साथ 7 से अगला उच्च 11 होगा जो बाइनरी में 1011 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
-
कॉपी:=n, शून्य:=0, वाले:=0
-
जबकि कॉपी 0 नहीं है और कॉपी सम है, करें
-
शून्य :=शून्य + 1
-
कॉपी =कॉपी / 2
-
-
जबकि कॉपी विषम है, करें
-
वाले :=वाले + 1
-
कॉपी =कॉपी / 2
-
-
दाएं :=वाले + शून्य
-
n:=n या (2^दाएं)
-
n :=n और उलटा ((2^दाएं) - 1)
-
n :=n OR((2 ^ (वाले - 1)) - 1
-
वापसी n
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
class Solution: def solve(self, n): copy = n zeros = 0 ones = 0 while copy and not copy & 1: zeros += 1 copy >>= 1 while copy & 1: ones += 1 copy >>= 1 right = ones + zeros n |= 1 << right n &= ~((1 << right) - 1) n |= (1 << ones - 1) - 1 return n ob = Solution() n = 7 print(ob.solve(n))
इनपुट
7
आउटपुट
11