2014-03-13 30 views
1

我想找到兩個數組之間的公共元素。我的功能無法正常工作。 數組已排序。 只是想將兩個有序數組放入check_common函數中以顯示常見元素。 任何人都可以幫助解決它請!兩個數組之間的通用函數?

void check_common (int x[], int size1, int y[], int size2) 
    { 
     int temp; 
cout << " Common elements are:\t" << endl; 
for (int i=0; i <= size2; i++) 
{ 
    for (int j=0; j <= size1; j++) 
    { 
     if (x[j] == y[j]){ 
      temp = x[j]; 
      cout << temp << "\t";} 
    } 
} 
cout << endl; 
    } 
+0

我不確定你在問什麼。 – dutt

+0

'for(int i = 0; i mah

回答

1

如果在兩個數組中的任何一個數組中的項不是唯一的,因爲所有其他元素都被移位了,那麼您的解決方案將失敗。

天真的解決方案是使用O(n)檢查。檢查array1中的每個元素是否也存在於array2中。由於列表已排序,因此執行此項檢查的時間爲O(log(n))。 因此整體運行時間將是O(nlog(n)),這相當不錯。 如果您可以保證每個列表項都是唯一的,則可以在O(log(n))中完成。

0

它看起來像一個'家庭作業',所以這裏是建議。

  1. 您需要傳遞兩個數組的大小。現在,你的循環是一個永無止境的循環,系統會爲你報告一個錯誤,否則你的程序將掛起。
  2. 由於您正在對兩個陣列進行排序,因此您可以使用兩個索引 - 一個用於x,另一個用於y陣列。向前移動兩個指針,無論哪個點指向「較小」值。兩者都達到陣列限制時停止。每當兩個指針指向相同的值時,就打印出來。

事情是這樣的假設nxx大小和尺寸ny如果y

ix=0 ; 
iy=0 ; 
while (ix < nx && iy < ny) 
{ 
    if (x[ix] == y[iy]) 
    { 
     std::cout << x[ix] << "\t" ; 
     ix++ ; 
     iy++ ; 
    } 
    else if (x[ix] < y[iy]) 
     ix++ ; 
    else 
     iy++ ; 
} 

我離開你煉此功能,並改變check_common函數參數。

+0

這非常有用。 tnx人;) – user3396107