0

有人可以帮助我解决这个问题吗?我需要找出一种方法以最佳/最快的顺序消除多个数组中的相似元素,以便将我的数组驱动为 0 个元素。IE 如果我有以下数组:

         'a    {1,12,10,31}'
         'b    {12,21}'
         'c    {12,18,5,21}'
         'd    {12,18,21}'

我想删除 12 -> 21 (b 完成)然后 -> 18 (d 完成)

这个问题确实与软件不兼容有关......任何想法都会有所帮助。谢谢,帕特

4

1 回答 1

0

好吧,这取决于多个数组的数量。如果你只有两个,你可以单独对它们进行排序,并按顺序同时遍历它们,然后删除。

但是,当您拥有任意数量的数组时,这会很快变得复杂。

在这种情况下,最简单的方法是:

  1. 将所有内容(合并)放在一个数组中(名为 ARRAY)

  2. 对数组进行排序(ARRAY)

  3. 迭代数组 (ARRAY),同时删除仅出现一次的元素,并留下多次出现的元素的单个副本

  4. 然后对于每个原始数组(例如 A、B、C、D),与 ARRAY 一起迭代这个原始数组(例如 A),并删除 A 中也存在于 ARRAY 中的元素。

对于第 4 步,您可能需要类似(用伪 C 代码编写):

foreach (A = arrays [A, B, C, D]) { // for each original array
  int j=0;
  for (int i=0;i<A.size;i++) { // iterating over array A
    // increase index j to iterate ARRAY (find closest # in ARRAY >= A[i])
    while (j<ARRAY.size-1 && A[i]>ARRAY[j]) j++;

    if (ARRAY[j]==A[i]) /* remove it */;
    else /* keep it */;
  }
}
于 2012-09-01T02:15:57.460 回答