簡體   English   中英

兩個數組之間的共同功能?

[英]common function between two arrays?

我想找到兩個數組之間的共同元素。 我的功能無法正常工作。 數組已排序。 只是想將兩個排序數組放入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;
    }

如果項目在任何一個數組中都不都是唯一的,那么您的解決方案將失敗,因為所有其他元素都將隨之移動。

幼稚的解決方案是使用O(n)檢查。 檢查array1中的每個元素是否也存在於array2中。 因為列表已排序,所以此檢查在O(log(n)) 因此,整個運行時將為O(nlog(n)) ,這還可以。 如果可以保證每個列表項都是唯一的,則可以在O(log(n))

看起來像是“作業”,所以這里有一些建議。

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

像這樣假設的東西nx是尺寸xny的大小,如果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函數參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM