Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ระยะห่างระหว่าง 1 ที่ไกลที่สุดในรูปแบบไบนารีใน JavaScript


ภาพรวม

เราต้องเขียนฟังก์ชันที่รับจำนวนเต็มบวก 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