У вас получилось так же тяжелое решение. Метод .shift() занимает O(N), т.е. удаляет первый элемент и все остальные сдвигает на -1 позицию. И того, если у вас M нечетных чисел, в итерации arr.map(...) (K — всего чисел), сложность будет O(M*K), что, при тесте, где все числа нечетные, выйдет O(K^2) (так как M === K). В некоторые компании, такие решения не принимаются(
Чтоб это исправить, достаточно создать указатель элементы в odd_sorted:
function oddSort(arr) {
//отобрать только нечетные и отсортировать
odd_sorted = arr.filter((x)=> x%2==1 ).sort((a,b)=>a-b);
//вставить их на нечетные места
let i = 0; // увеличиваем его каждый раз, после вставки нечетных в массив
return arr.map(item => {
return (item%2 != 0)? odd_sorted[i++] : item;
});
}
Чтоб это исправить, достаточно создать указатель элементы в odd_sorted:
что даст сложность O(2K + MlogM) (уже не квадрат)