ภาพรวม
เราต้องเขียนฟังก์ชันที่รับจำนวนเต็มบวก n หาระยะห่างที่ไกลที่สุดระหว่าง 1 ที่อยู่ติดกันในรูปแบบไบนารีของ n
ถ้าไม่มี 1 ติดกันสองตัว ให้คืน 0
สอง 1 ถือว่าติดกันถ้ามีแต่ 0 คั่นระหว่างกัน (อาจไม่มี 0 ก็ได้) ระยะห่างคือความต่างสัมบูรณ์ของตำแหน่งบิต เช่น "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;
for (let i = 0; i < 32; i++) {
if ((num >> i) & 1 > 0) {
if (last >= 0) {
ans = Math.max(ans, i - last);
}
last = i;
}
}
return ans;
};
console.log(binaryGap(num));
ผลลัพธ์ในคอนโซล
2