Это можно сделать разными способами:
1 - Грубая сила: для каждого элемента в массиве 1 проверьте, что элемент существует в массиве 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 - Best of Best (Среди вышеперечисленных): вычесть или взять разность каждого элемента в одном и том же индексе двух массивов и, наконец, суммировать вычитаемые значения. Например, A1 = {1,2,3}, A2 = {3,1,2}, Diff = {- 2,1,1} теперь суммируют Diff = 0, что означает, что они имеют одинаковый набор целых чисел. Этот подход требует O (n) без дополнительной памяти. Код C # будет выглядеть следующим образом:
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 вообще не работает, это худшее