Computer >> Máy Tính >  >> Lập trình >> Javascript

Khoảng cách dài nhất giữa các giây trong JavaScript nhị phân

Chúng tôi được yêu cầu viết một hàm JavaScript ở dạng số nguyên dương, chẳng hạn như n. Hàm sẽ tìm và trả về khoảng cách dài nhất giữa hai số 1 liền kề bất kỳ trong biểu diễn nhị phân của n.

Nếu không có hai số 1 liền kề, thì chúng ta phải trả về 0.

Hai số 1 liền kề nếu chỉ có số 0 ngăn cách chúng (có thể không có số 0). Khoảng cách giữa hai số 1 là sự khác biệt tuyệt đối giữa các vị trí bit của chúng. Ví dụ:hai số 1 trong "1001" có khoảng cách là 3.

Ví dụ -

Nếu đầu vào là 22, thì đầu ra phải là 2,

bởi vì,

  • Mã nhị phân cho 22 là 10110
  • Cặp số 1 liền kề đầu tiên là "10110" với khoảng cách là 2.
  • Cặp số 1 liền kề thứ hai là "10110" với khoảng cách là 1.
  • Câu trả lời là khoảng cách lớn nhất trong hai khoảng cách này, là 2.

Lưu ý rằng "10110" không phải là một cặp hợp lệ vì có một số 1 ngăn cách hai số 1 được gạch chân.

Ví dụ

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

2