Я все еще новичок, когда дело доходит до программирования на C, поэтому, пожалуйста, будьте внимательны в объяснениях. Кроме того, это домашнее задание, поэтому я был бы признателен, если бы вы помогли мне решить эту проблему. Я просмотрел сайт и смог найти только сообщения, похожие на этот вопрос. В тех, которые я нашел, упоминались такие вещи, как хэш-таблицы, которые я не изучал, поэтому я сомневаюсь, что такие вещи можно использовать.
Для моего задания у меня есть два несортированных целочисленных массива одинаковой длины. Они могут иметь только целые числа в диапазоне 0-99. Допускаются повторяющиеся элементы. Цель состоит в том, чтобы увидеть, имеют ли они одинаковые элементы, поэтому проверьте, равны ли они, не сортируя их. Мой профессор также сказал, что он должен выполняться в линейном времени, поэтому их сортировка невозможна.
Например,
A[4]={1,2,3,4}
B[4]={4,3,2,1}
Эти массивы будут равны. Однако,
A[3]={1,1,2}
B[3]={2,2,1}
Эти массивы не равны.
Алгоритм, который я придумал, выглядит следующим образом:
Первый цикл for выполняет итерацию по первому массиву, а внутренний цикл for выполняет итерацию по второму массиву. Он будет проверять, равен ли текущий элемент в первом массиве элементу во втором. Если они равны, то внешний цикл повторяется, а внутренний цикл for снова начинается с первого элемента, проверяя, совпадает ли когда-либо текущий элемент в первом массиве с элементом во втором. Если нет, то он выходит из обоих циклов и возвращает 0, указывающий, что они не равны. Этот алгоритм не работает за линейное время. Кроме того, он не проверяет наличие дубликатов, поскольку внутренний цикл for каждый раз проверяет все элементы во втором массиве.
Я думал об изменении значения элемента во втором массиве на что-то чрезвычайно большое каждый раз, когда обнаруживалось, что оно равно элементу в первом массиве. Я думаю, что таким образом это избавит от проблемы дублирования. Но мне все еще нужна помощь в создании более быстрого алгоритма и понимании моей ошибки. Спасибо.