เราต้องเขียนฟังก์ชัน 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