Функция сравнения двух массивов чисел без учёта порядка

Сравните длины, затем частоты каждого числа. Это учитывает дубликаты: массивы с одинаковым набором значений, но разным количеством повторов не равны.

Короткий ответ

Что ответить на собеседовании

Сравните длины, затем частоты каждого числа. Это учитывает дубликаты: массивы с одинаковым набором значений, но разным количеством повторов не равны.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию, которая получает два массива целых чисел и возвращает true, если в обоих массивах содержатся одинаковые элементы, независимо от их расположения, и false в противном случае.

// isSimilar([0,1,2], [2,1,0]) === true
// isSimilar([0,1], [2,1,0]) === false
// isSimilar([0,5,1], [0,1,5]) === true

isSimilar(arr1, arr2)

function isSimilar(arr1, arr2) {
}

Ответ

Сравните длины, затем частоты каждого числа. Это учитывает дубликаты: массивы с одинаковым набором значений, но разным количеством повторов не равны.

function isSimilar(first, second) {
  if (first.length !== second.length) return false;
  const counts = new Map();
  for (const value of first) counts.set(value, (counts.get(value) ?? 0) + 1);
  for (const value of second) {
    const count = counts.get(value) ?? 0;
    if (count === 0) return false;
    counts.set(value, count - 1);
  }
  return true;
}

Оба пустых массива равны. В отличие от сортировки, порядок исходников не меняется. Среднее время O(n + m), память O(k) для различных чисел. Один Set был бы недостаточен, потому что теряет повторения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее