Привет, ребята, я изо всех сил пытаюсь решить этот вопрос по кодификации.
**Двоичный пробел в положительном целом числе 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 и пройти несколько испытаний кода. Возможно, вы никогда не узнаете, насколько вы логичны в решении задач, пока не попробуете большинство из этого теста.