खैर, आप जवाब खोजने के लिए एल और आर के एक्सओआर का उपयोग कर सकते हैं ।
मान लीजिए, l = 4 और r = 6।
l = 100, r = 110 (इन संख्याओं के द्विआधारी समतुल्य)
lr = 0 10
इसका मतलब यह है कि आप जिस अधिकतम मूल्य की तलाश कर रहे हैं वह निश्चित रूप से शून्य के रूप में इसका पहला बिट (MSB) होगा। (इसके बारे में सोचो, क्या आपके 1 के बजाय 1 बिट में अधिकतम मूल्य होना संभव है ? यदि यह 01010 और 00101 था, तो xor = 01 111 होगा या अधिकतम होगा। 01010 और 00101 के बीच का मान निश्चित रूप से होगा। एक १ बाएं से उनके दूसरे बिट में , बाएं से दूसरे बिट से पहले 1 प्राप्त करना संभव नहीं है ( बाएं से पहले बिट में)
तो, आपको अधिकतम खोजने के लिए शेष 2 बिट्स के साथ छोड़ दिया जाता है। हम जानते हैं, कि हमारे साथ n बिट्स होने पर अधिकतम संभव मान = 2 n therefore1 है, इसलिए इस मामले में उत्तर 2 होगा 2 -1 = 4-1 = 3 होगा।
उपरोक्त उदाहरण से, हम इसके लिए एक सामान्य एल्गोरिदम बना सकते हैं।
चरण 1. संख्या = अधिकतम ( l , r) को दर्शाने के लिए आवश्यक बिट की संख्या )
चरण 2. रेस = एल ⊕ आर
चरण 3. पॉस = पहले बिट की स्थिति जो रेस में बाईं ओर से सेट है (0-आधारित अनुक्रमण)
चरण 4. एन = संख्या - पॉज़
चरण 5. ans = 2 n .1
समय जटिलता = O (n)
j
के माध्यम से चलानेi+1..r
औरi
के माध्यम से चलानेl...r-1
सटीक होना करने के लिए।