C # - Array2 содержит Array1 игнорировать порядок

1

Где я должен посмотреть, хочу ли я написать фрагмент кода, который ищет Array1 в Array2, независимо от порядка (учитывая дубликаты)? например

Array1: { 2,5,6,6,3 }
Array2: { 1,2,3,4,5,6,6 }
will return true


Array1: { 2,5,6,6,3 }
Array2: { 1,2,3,4,5,6 }
will return false

Я вроде хочу решить его myslef, мне просто нужно указать в каком-то направлении.

Заранее спасибо.

  • 2
    Я не уверен, что понимаю вашу логику. Ваш первый пример, безусловно, выглядит так, как будто он содержится, а другой может быть, если вы игнорируете дубликаты.
  • 0
    Что именно вы подразумеваете под "помнить дубликаты"?
Показать ещё 8 комментариев
Теги:
arrays
compare

1 ответ

0
Лучший ответ

Ну, поскольку вам нужны только подсказки, а не код, один из методов:

  1. Скопируйте array2 в List<int>.

  2. Сортируйте его.

  3. Выделите бит массива, который used равным размеру списка. Это будут флажки, указывающие, был ли конкретный элемент в отсортированном списке использован для соответствия.

  4. Для каждого элемента item в array1:

    4.1 Двоичный поиск отсортированного списка для item.

    4.2. Если не найдено, return false - array2 не содержит array1.

    4,3. Если найдено, и есть дубликаты, алгоритм двоичного поиска будет случайным образом возвращать индекс одного из дубликатов. Отсканируйте назад в части списка, которая соответствует item пока не найдете тот, для которого used[i], значение false. Если вы его найдете, установите used[i] значение true и продолжите внешний цикл. Если вы его не нашли, отсканируйте его в исходном двоичном индексе поиска, пытаясь найти неиспользуемое совпадение. Аналогичным образом used[index] для true, если оно найдено, и продолжить цикл через array1.

    4.4 Если не найдено неиспользуемого совпадения, верните false - array2 не содержит array1.

  5. Найдя неиспользуемое соответствие для каждого элемента array1, верните true: array1 содержится внутри array2.

Преимущество этого алгоритма состоит в том, что для проверки множества массивов для содержания в данном массиве вам не нужно повторно сортировать массив каждый раз, вам нужно только повторно назначить BitArray.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню