เราต้องเขียนฟังก์ชัน JavaScript ที่เป็นจำนวนเต็มบวก เช่น n ฟังก์ชันควรค้นหาและส่งกลับระยะทางที่ยาวที่สุดระหว่าง 1 สองตัวที่อยู่ติดกันในการแทนค่าไบนารีของ n
หากไม่มี 1 สองตัวที่อยู่ติดกัน เราจะต้องคืนค่า 0
1 สองตัวอยู่ติดกัน ถ้ามีเพียง 0 ที่แยกจากกัน (อาจไม่มี 0) ระยะห่างระหว่าง 1 สองตัวคือความแตกต่างที่แน่นอนระหว่างตำแหน่งบิต ตัวอย่างเช่น 1 สองตัวใน "1001" มีระยะห่าง 3
ตัวอย่างเช่น −
หากอินพุตเป็น 22 เอาต์พุตควรเป็น 2
เพราะ
- รหัสไบนารี่สำหรับ 22 คือ 10110
- คู่แรกที่อยู่ติดกันของ 1 คือ "10110" โดยมีระยะห่าง 2
- คู่ที่สองที่อยู่ติดกันของ 1 คือ "10110" โดยมีระยะห่าง 1
- คำตอบคือที่ใหญ่ที่สุดของระยะทางทั้งสองนี้ ซึ่งก็คือ 2.
โปรดทราบว่า "10110" ไม่ใช่คู่ที่ถูกต้องเนื่องจากมี 1 แยก 1 สองตัวที่ขีดเส้นใต้
ตัวอย่าง
const num = 22; const binaryGap = (num = 1) => { let last = -1; let ans = 0; // go through every bit for (let i = 0; i < 32; i++) { // check whether the bit is `1`. // if true, calculate the longest distance with // previous `1` if `1` was previously found. if ((num >> i) & 1 > 0) { if (last >= 0) { ans = Math.max(ans, i - last); } last = i; } } return ans; }; console.log(binaryGap(num));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
2