Сравните длины, затем частоты каждого числа. Это учитывает дубликаты: массивы с одинаковым набором значений, но разным количеством повторов не равны.
Функция сравнения двух массивов чисел без учёта порядка
Сравните длины, затем частоты каждого числа. Это учитывает дубликаты: массивы с одинаковым набором значений, но разным количеством повторов не равны.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая получает два массива целых чисел и возвращает 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 был бы недостаточен, потому что теряет повторения.