Вопрос теста на кодильность

Привет, ребята, я изо всех сил пытаюсь решить этот вопрос по кодификации.
**Двоичный пробел в положительном целом числе N — это любая максимальная последовательность последовательных нулей, которая окружена единицами с обоих концов в двоичном представлении N.

Например, число 9 имеет двоичное представление 1001 и содержит двоичный пробел длины 2. Число 529 имеет двоичное представление 1000010001 и содержит два двоичных пробела: один длиной 4 и один длиной 3. Число 20 имеет двоичное представление 10100 и содержит один двоичный пробел длины 1. Число 15 имеет двоичное представление 1111 и не имеет двоичных пробелов. Число 32 имеет двоичное представление 100000 и не имеет двоичных пробелов.

Напишите функцию:

function solution(N);

которая, учитывая положительное целое число N, возвращает длину самого длинного двоичного промежутка. Функция должна возвращать 0, если N не содержит двоичного промежутка.

Например, при N = 1041 функция должна вернуть 5, потому что N имеет двоичное представление 10000010001 и поэтому его самый длинный двоичный промежуток имеет длину 5. При N = 32 функция должна вернуть 0, потому что N имеет двоичное представление ‘100000’ и поэтому не имеет двоичных промежутков.

Напишите эффективный алгоритм для следующих предположений:

N — целое число в диапазоне [1..2,147,483,647].**.

После ряда неудач я наконец-то нашел решение. Не буду врать, сначала было очень неприятно, даже пример кода, который я нашел в интернете, не работал.

Но я наконец-то нашел способ решить тест.

Ниже вы найдете мой код.

function solution(N) {
  // write your code in JavaScript (Node.js 8.9.4)
  let base = N.toString(2);
  let result = 0; //initialize to 0
  let t = 0;
  let array = [];

  for (let n in base) {
    let b = base[n]; 
    if (b == 1) {
      if (t >= 0) {
        array.push(result);
        result = 0;
        t = 0;
      } else {
        t += 1;
      }
    } else {
      result = result + 1;
    }
  }

  return array.reduce((a, b) => Math.max(a, b), -Infinity);
}

Вход в полноэкранный режим Выход из полноэкранного режима

Если вы занимаетесь разработкой программного обеспечения, я настоятельно рекомендую вам зарегистрироваться на codility и пройти несколько испытаний кода. Возможно, вы никогда не узнаете, насколько вы логичны в решении задач, пока не попробуете большинство из этого теста.

Оцените статью
devanswers.ru
Добавить комментарий