Это можно сделать разными способами:
1 - Грубая сила: для каждого элемента в array1 проверить, что элемент существует в массив2. Обратите внимание, что для этого потребуется отметить позицию/индекс, чтобы дубликаты могли обрабатываться надлежащим образом. Для этого требуется O (n^2) с очень сложным кодом, даже не думайте об этом ...
2 - Сортируйте оба списка, затем проверьте каждый элемент, чтобы убедиться, что они идентичны. O (n log n) для сортировки и O (n) для проверки в основном O (n log n), сортировка может выполняться на месте, если беспорядок в массивах не является проблемой, если нет необходимости иметь память размером 2n для копирования отсортированного списка.
3 - добавьте элементы и подсчитайте их из одного массива в хеш-таблицу, затем выполните итерацию по другому массиву, проверяя, что каждый элемент находится в хеш-таблице, и в этом случае счетчик декремента, если он не равен нулю, в противном случае удаляет его из хеш-таблицы. O (n) для создания хэш-таблицы и O (n) для проверки других элементов массива в хэш-таблице, поэтому O (n). Это вводит хэш-таблицу с максимальной памятью для n элементов.
4 - Лучший из лучших (среди вышеперечисленных): вычитайте или разделите каждый элемент в том же индексе двух массивов и, наконец, подведите итоговые значения. Например, A1 = {1,2,3}, A2 = {3,1,2} Diff = {- 2,1,1} теперь суммируют Diff = 0, что означает, что они имеют одинаковый набор целых чисел. Для этого подхода требуется O (n) без дополнительной памяти. С # код будет выглядеть следующим образом:
public static bool ArrayEqual(int[] list1, int[] list2)
{
if (list1 == null || list2 == null)
{
throw new Exception("Invalid input");
}
if (list1.Length != list2.Length)
{
return false;
}
int diff = 0;
for (int i = 0; i < list1.Length; i++)
{
diff += list1[i] - list2[i];
}
return (diff == 0);
}
4 не работает вообще, это самый худший
Почему бы не поднять ее на ступеньку и посмотреть, что произойдет, если мы не сможем сортировать. очевидно, мы должны иметь возможность сравнивать для равенства. – Hugo 2008-10-29 03:02:05
Похоже, вы спрашиваете, как сравнивать наборы – naumcho 2009-03-13 01:45:22
yep, вот и все. – nickf 2009-03-13 01:52:33