C# - Array2包含Array1忽略顺序

时间:2014-12-09 17:45:55

标签: c# arrays compare

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

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

我想解决它的问题,我只需要指向某个方向。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好吧,既然你只需要提示而不是代码,那么一种方法就是:

  1. array2复制到List<int>

  2. Sort it

  3. 分配名为used的{​​{3}}等于列表大小。这些将是标志,指示排序列表中的特定项目是否已用于匹配。

  4. 对于item中的每个项array1

    4.1 bit array 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

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