Для вводного курса по информатике мы должны написать функцию, которая находит пересечение двух массивов, каждый из которых отображается только один раз и не выделяет больше места, чем нам нужно.
Например:
массив A = {1, 2, 3, 3, 3, 5}
массив B = {2, 2, 2, 3, 5, 6}
пересечение A и B = {2, 3, 5}
Как я могу выполнить sh, не зацикливаясь на обоих массивах дважды? В моем нынешнем виде у меня есть:
//find how large of an array I'll need
for array A
for array A
if A[i] is already somewhere earlier in array A
stop
else
loop through array B
if A[i] is in array B, increment a counter
declare a new array of size counter
//add unique elements to the array
for array A
for array A
if A[i] is already somewhere earlier in array A
stop
else
loop through array B
if A[i] is in array B, add it to the new array
Кажется, что это будет действительно неэффективно, у меня есть два почти идентичных вложенных цикла for. Если бы я использовал python, я мог бы просто добавить уникальные элементы в список, но есть ли способ сделать что-то подобное в C? Я мог бы просто объявить массив максимально необходимого размера, но я пытаюсь минимизировать сложность пространства.