@OrangeBox

Объединение двух отсортированных массивов?

Здравствуйте!
Вот задача:
Вам даны два отсортированных целочисленных массива nums1 и nums2, нужно поместить все элементы nums2 в nums1 так чтобы элементы итогового массива остались отсортированными.
Количество элементов в массивах nums1 и nums2 равны m и n соотвественно
В массиве nums1 зарезервированно место для всех элементов (n + m) и заполнены нулями
Результат должен сохраниться в переменной nums1, результат функции явно возвращать не обязательно
Формат ввода: [46,55,88,0,0,0,0] 3 [18,29,80,90] 4

Мое решение не проходит тесты. Не могу понять почему. Всю голову сломал. Подскажите пожалуйста!
function merge(nums1, m, nums2, n) {
nums1 = nums1.slice(0, m).concat(nums2).sort((a, b) => a - b);
}

P.S. Заготовка функции уже дана с параметрами, надо написать только тело ф.
  • Вопрос задан
  • 1105 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
В нынешнем варианте функция не возвращает результата и меняет не глобальный массив, а переданный ей аргументом. При этом исходный массив остается неизменным. Вот доказательство этого косяка в Scratchpad'е FireFox'а:
(()=>{  
  function merge(nums1, m, nums2, n) {
    nums1 = nums1.slice(0, m).concat(nums2).sort((a, b) => a - b);
  }
  
  var nums1 = [46,55,88,0,0,0,0];
  merge( nums1, 3, [18,29,80,90], 4);

  return JSON.stringify(nums1);
})()
/*
[46,55,88,0,0,0,0] // исходный массив не изменился
*/
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
nums1 = nums1.slice(0, m).concat(nums2).sort((a, b) => a - b);

Так вы меняете значение ссылки, но не сам массив. Правильно будет так:

nums1.splice(0, nums1.length, ...[ ...nums1.slice(0, m), ...nums2 ].sort((a, b) => a - b));

// или

nums1.slice(0, m).concat(nums2).sort((a, b) => a - b).forEach((n, i) => nums1[i] = n);

Но вообще, решение тут другое предполагается, без использования метода sort.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы