2012-09-01 48 views
0

有人可以協助我如何解決這個問題;我需要找出一種方法來以最快/最快的順序消除多個數組中的相似元素,以便將我的數組驅動到0個元素。 I.E.如果我有以下陣列:最有效的命令,以減少多個陣列中的元素,使陣列有0個元素

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

我想刪除12 - > 21(B完成),然後 - > 18(d完成)

這個問題真的是關係到軟件不兼容......任何想法都會有所幫助。 謝謝, 帕特

+1

在什麼語言? – PeeHaa

+0

基於什麼去除元素?例如。如果你把所有的長度都設置爲零,那麼最快但可能不會做你所需要的。 – scunliffe

+0

其刪除多於1個數組中的整數,並保持整數僅在1個數組中找到 – ronalchn

回答

0

那麼,這取決於多少是多個數組。如果您只有兩個,您可以單獨對它們進行排序,然後按順序同時遍歷這兩個,然後刪除。

但是,當您有任意數量的數組時,這會變得很快。

在這種情況下,最簡單的是:

  1. 在單個陣列中把一切(合併)(命名爲ARRAY)

  2. 排序數組(ARRAY)

  3. 迭代(ARRAY),同時刪除僅出現一次的元素,並且多次出現元素的單個副本

  4. 然後爲每個原始數組(例如。 A,B,C,D),將這個原始數組(例如A)與ARRAY一起迭代,並刪除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 */; 
    } 
}