C# - 数组 2 包含数组 1 忽略顺序

本文关键字:数组 顺序 包含 | 更新日期: 2023-09-27 18:33:40

如果我想编写一段在 Array2 中查找 Array1 的代码,无论顺序如何(记住重复项(,我应该在哪里查找?例如

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

有点想解决它,我只需要指向某个方向。

提前谢谢。

C# - 数组 2 包含数组 1 忽略顺序

好吧,由于您只需要提示而不是代码,因此一种方法是:

  1. array2复制到List<int>中。

  2. 排序。

  3. 分配一个名为used的位数组,该数组等于列表的大小。 这些将是指示排序列表中的特定项目是否已用于匹配的标志。

  4. 对于array1item的每个项目:

    4.1 在排序列表中进行二分搜索以查找item

    4.2. 如果未找到,则返回 false -- array2不包含 array1

    4.3. 如果找到,并且有重复项,二叉搜索算法将随机返回其中一个重复项的索引。 在列表中与item匹配的部分向后扫描,直到找到used[i]为假的部分。 如果找到,请将used[i]设置为 true,然后继续外部循环。 如果找不到,请从初始二叉搜索索引向前扫描,尝试查找未使用的匹配项。 同样,如果找到一个,请将used[index]设置为 true,并继续循环遍历array1

    4.4 如果未找到未使用的匹配项,则返回 false -- array2不包含 array1

  5. 找到 array1 中每个项目的未使用匹配项后,返回 true:array1包含在 array2 中。

该算法的一个优点是,要检查多个数组是否包含在给定数组中,您不需要每次都对数组进行重新排序,您只需要重新分配BitArray