Линейный алгоритм поиска - C#
Формулировка задачи:
Доброго времени суток.
И так, нужно найти элементы которые присутствуют только в массиве
Но для выше поставленной задачи этот вариант не подходит, та как если просто написать
произойдет множественное дублирование.
Есть конечно идея сравнивать каждый элемент a[i] со всеми элементами b[j], и уже после этого делать вывод по параметру
То бишь если нет ни одного схожего элемента, значит он уникальный и записываем в массив
a
или только в массивеb
, то бишь исключить повторяющиеся элементы (массивы одномерные). Когда нужно было найти элементы присутствующие в обоих массивах использовался вот такой алгоритм
Листинг программы
- int[] c = new int[n + m];
- int count = 0;
- for (i = 0; i < a.Length; i++)
- {
- for (j = 0; j < b.Length; j++)
- {
- if (a[i] == b[j])
- {
- c[count] = a[i];
- count++;
- }
- }
- }
Листинг программы
- if (a[i] != b[j])
Листинг программы
- if (a[i] == b[j])
c
. Но вот никак не получается это реализовать. Прошу помощи в данном вопросе.Решение задачи: «Линейный алгоритм поиска»
textual
Листинг программы
- public void SymmetricExceptWith(IEnumerable<T> other)
- {
- if (other == null)
- throw new ArgumentNullException("other");
- if (this.m_count == 0)
- this.UnionWith(other);
- else if (other == this)
- {
- this.Clear();
- }
- else
- {
- HashSet<T> hashSet = other as HashSet<T>;
- if (hashSet != null && HashSet<T>.AreEqualityComparersEqual(this, hashSet))
- this.SymmetricExceptWithUniqueHashSet(hashSet);
- else
- this.SymmetricExceptWithEnumerable(other);
- }
- }
- private void SymmetricExceptWithUniqueHashSet(HashSet<T> other)
- {
- foreach (T obj in other)
- {
- if (!this.Remove(obj))
- this.AddIfNotPresent(obj);
- }
- }
- [SecuritySafeCritical]
- private unsafe void SymmetricExceptWithEnumerable(IEnumerable<T> other)
- {
- int n = this.m_lastIndex;
- int length = BitHelper.ToIntArrayLength(n);
- BitHelper bitHelper1;
- BitHelper bitHelper2;
- if (length <= 50)
- {
- int* bitArrayPtr1 = stackalloc int[length];
- bitHelper1 = new BitHelper(bitArrayPtr1, length);
- int* bitArrayPtr2 = stackalloc int[length];
- bitHelper2 = new BitHelper(bitArrayPtr2, length);
- }
- else
- {
- bitHelper1 = new BitHelper(new int[length], length);
- bitHelper2 = new BitHelper(new int[length], length);
- }
- foreach (T obj in other)
- {
- int location = 0;
- if (this.AddOrGetLocation(obj, out location))
- bitHelper2.MarkBit(location);
- else if (location < n && !bitHelper2.IsMarked(location))
- bitHelper1.MarkBit(location);
- }
- for (int bitPosition = 0; bitPosition < n; ++bitPosition)
- {
- if (bitHelper1.IsMarked(bitPosition))
- this.Remove(this.m_slots[bitPosition].value);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д