Посчитайте суммы цифр соседних чисел и проверьте их сумму за один проход. Для [1,5,4,3,2,6] первый подходящий индекс равен 4: пара 2 и 6.
Определение индекса первой пары соседних чисел, сумма цифр которых равна 8
Посчитайте суммы цифр соседних чисел и проверьте их сумму за один проход. Для [1,5,4,3,2,6] первый подходящий индекс равен 4: пара 2 и 6.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, получающую массив целых чисел и возвращающую индекс первого вхождения двух стоящих рядом элементов, у которых сумма всех цифр обоих чисел равна 8. Требуется подобрать решение с наименьшей возможной асимптотической сложностью.
const numbers = [1, 5, 4, 3, 2, 6]
Ответ
Посчитайте суммы цифр соседних чисел и проверьте их сумму за один проход. Для [1,5,4,3,2,6] первый подходящий индекс равен 4: пара 2 и 6.
function digitSum(value) {
let n = Math.abs(value), sum = 0;
do { sum += n % 10; n = Math.floor(n / 10); } while (n > 0);
return sum;
}
function firstPair(numbers) {
if (numbers.length < 2) return -1;
let previous = digitSum(numbers[0]);
for (let i = 1; i < numbers.length; i++) {
const current = digitSum(numbers[i]);
if (previous + current === 8) return i - 1;
previous = current;
}
return -1;
}
Предполагаются безопасные целые Number; знак не считается цифрой. Каждое число обрабатывается один раз: O(n·d), где d — число цифр; при ограниченной разрядности это O(n), память O(1).