हमें एक JavaScript फ़ंक्शन लिखना है जो एक धनात्मक पूर्णांक लेता है, मान लीजिए n। फ़ंक्शन को n के बाइनरी प्रतिनिधित्व में किन्हीं दो आसन्न 1s के बीच की सबसे लंबी दूरी ढूंढकर लौटानी चाहिए।
यदि दो आसन्न 1s नहीं हैं, तो हमें 0 लौटाना होगा।
दो 1s आसन्न हैं यदि उनके बीच केवल 0s हैं (संभवतः कोई 0 नहीं)। दो 1s के बीच की दूरी उनके बिट पोजीशन के बीच का निरपेक्ष अंतर है। उदाहरण के लिए, "1001" में दो 1s की दूरी 3 है।
उदाहरण के लिए -
यदि इनपुट 22 है, तो आउटपुट 2 होना चाहिए,
क्योंकि,
- 22 का बाइनरी कोड 10110 है
- 1s का पहला आसन्न जोड़ा "10110" है जिसकी दूरी 2 है।
- 1s का दूसरा आसन्न जोड़ा "10110" है जिसकी दूरी 1 है।
- उत्तर इन दो दूरियों में से सबसे बड़ा है, जो 2 है।
ध्यान दें कि "10110" एक वैध जोड़ा नहीं है क्योंकि अंडरलाइन किए गए दो 1s को अलग करने वाला एक 1 है।
उदाहरण
const num = 22; const binaryGap = (num = 1) => { let last = -1; let ans = 0; // हर बिट से गुजरें for (let i = 0; i < 32; i++) { // जांचें कि बिट `1` है या नहीं। // // यदि सच है, तो पिछले `1` के साथ सबसे लंबी दूरी की गणना करें // यदि `1` पहले मिला था। if ((num >> i) & 1 > 0) { if (last >= 0) { ans = Math.max(ans, i - last); } last = i; } } return ans; }; console.log(binaryGap(num));आउटपुट
कंसोल में आउटपुट होगा -
2