Работаю над некоторыми вызовами Javascript для Code Signal, и у меня есть проблема, решающая это:
Ратиорг получил статуи разных размеров в подарок от CodeMaster на свой день рождения, каждая статуяимеющий неотрицательный целочисленный размер. Поскольку ему нравится совершенствовать вещи, он хочет расположить их от самых маленьких до самых больших, чтобы каждая статуя была больше, чем предыдущая, ровно на 1. Ему могут потребоваться некоторые дополнительные статуи, чтобы это сделать. Помогите ему определить минимальное количество необходимых дополнительных статуй. Пример Для статуй = [6, 2, 3, 8] вывод должен быть makeArrayConsecutive2 (statues) = 3. Ратиоргу нужны статуи размеров 4, 5 и 7.
Мой подход:
- Сортировка массива от наименьшего к наибольшему
- Создание переменной счетчика для хранения количества пропущенных чисел
- Итерация по массиву
- Вычитание [i +1] элемент из элемента [i]
- Если он равен 1, числа являются последовательными, если не числа не являются последовательными (переменная счетчика приращений)
- Возвращаемая переменная счетчика
Вот мой код:
function makeArrayConsecutive2(statues) {
// Sorts array numerically smallest to largest
statues.sort((a, b) => a - b);
let counter = 0;
// If array only contains one number return 0
if(statues.length === 1) {
return 0;
}
/* Iterate through array, subtract the current element from the next element, if it
equals 1 the numbers are consecutive, if it doesn't equal one increment the counter
variable */
for(let i = 0; i <= statues.length -1; i++) {
if(statues[i] !== statues.length -1 && statues[i + 1] - statues[i] != 1) {
counter++;
}
console.log(statues[i]);
console.log('counter : ' + counter);
}
return counter;
}
Когда statues
содержит [5, 4, 6]
, вывод выглядит так:
4
counter : 0
5
counter : 0
6
counter : 1
Я думаю, проблема в том, что массив находится в последнемэлемент, в данном случае 6, он пытается посмотреть statues[i + 1]
, когда этот элемент не существует. Я добавил statues[i] !== statues.length -1
в свое заявление if для решения этой проблемы, но, похоже, оно не работает. Что не так с моим кодом и почему последний элемент увеличивает значение счетчика?