Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ระยะทางที่ยาวที่สุดระหว่าง 1 วินาทีใน JavaScript ไบนารี


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