Переодоление барьера
Дан массив, элементы которого являются координатами барьеров на отрезке.
Мы можем делать прыжки равной длины с нуля направо.
Необходимо найти минимальную длину прыжка, которая позволит преодолеть все барьеры (в случае если таковую найти не удается, то преодолеваем одним прыжком).
Например в случае массива [5,3,6,7,9], минимальной длиной прыжка будет 4.
Надо написать функцию, которая получает массив координат барьеров и возвращает минимальную длину прыжка.
function barrier(x) {
x.sort((a, b) => a - b)
let a = [];
let k = 0;
for (let i = 0; i < x[x.length - 1]; i++) {
if (x[i - k] != (i + 1)) {
a.push(i + 1);
k++;
}
}
}
console.log(barrier([5,3,6,7,9])) // Должен вывести 4
console.log(barrier([2,3])) // Должен вывести 4
console.log(barrier([1,4,10,6,2])) // Должен вывести 7
console.log(barrier([19,32,11,23])) // Должен вывести 3
...
Пожолуйста помогите решить задачу...
Ответы (1 шт):
вы вроде вполне рабочую логику решения в вопросе описали. Создайте массив пропусков, потом проходитесь по нему, и проверяйте, если ли в исходном числа кратные текущему. Как только не нашлось, то это и будет минимальный шаг.
function barrier(x) {
x.sort((a, b) => a - b)
const max = x[x.length - 1];
var result = Array(max).fill()
.map((v,i) => ++i)
.filter(v => !x.includes(v));
let min = result.find(r => !x.some(v => v % r == 0));
return min ? min : max + 1;
}
console.log(barrier([5,3,6,7,9])) // Должен вывести 4
console.log(barrier([2,3])) // Должен вывести 4
console.log(barrier([1,4,10,6,2])) // Должен вывести 7
console.log(barrier([19,32,11,23])) // Должен вывести 3