Если требуется сохранить позиции исходных элементов, достаточно одного map с возведением в квадрат. Сортировка результата не гарантируется при наличии отрицательных чисел.
Квадрат элементов отсортированного массива
Если требуется сохранить позиции исходных элементов, достаточно одного map с возведением в квадрат. Сортировка результата не гарантируется при наличии отрицательных чисел.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеется массив целых чисел, уже отсортированный по возрастанию. Необходимо за один проход преобразовать каждый элемент, возведя его в квадрат, при этом сохранить исходный порядок элементов в массиве.
Ответ
Если требуется сохранить позиции исходных элементов, достаточно одного map с возведением в квадрат. Сортировка результата не гарантируется при наличии отрицательных чисел.
function squareElements(numbers) {
return numbers.map(value => value * value);
}
squareElements([-3, -1, 2]); // [9, 1, 4]
Это точно сохраняет соответствие индексов и выполняется за O(n). Требование «квадраты тоже отсортированы» было бы другой задачей: для неё используют два указателя по краям и заполняют результат с конца. Одновременно сохранить исходный порядок и возрастающий порядок квадратов в общем случае невозможно. Числа должны оставаться в нужном диапазоне точности.