2013-06-21 84 views
0

我想返回排序數組中重複值的數量。函數返回排序數組中重複數的計數

例如:A = {1,1,2,3,4,4},FRATELLI(N)應返回2.(它們是1,1和4,4)

我試圖使用一個遞歸的方法,但它不起作用。它總是給我4.

我在問,如果有人請能幫助我更好地理解這種編程方法。非常感謝!

功能:

#include <iostream> 
    using namespace std; 

    int fratelli(int a[], int l, int r) 
    { 
     if (l == r) return 0; 
     else 
     { 
      int c = (l+r)/2; 
      int n = fratelli(a, l, c) + fratelli(a, c+1, r); 
      if (a[l] == a[l+1]) n++; 
      return n; 
     } 

    } 


    int main() 
    { 
     const int _N = 11; 
     int array[_N] = { 1, 1, 2, 3, 5, 5, 7, 8, 8, 11, 12 }; 

     cout << "\n" << fratelli(array, 0, _N-1); 


     return 0; 
    } 
+2

如果你有a = {1,1,1}它應該返回2還是1? – Infested

+1

請勿將'_N'用作變量名稱。以下劃線和大寫字母開頭的名稱保留給實施。 –

+0

您確定要使用遞歸嗎?如果我理解正確,遞歸會使問題更加困難。 – gkovacs90

回答

5

你必須在這條線的錯誤:

if (a[l] == a[l+1]) n++; 

的檢查應在指數c沒有l。除此之外,你的代碼對我來說似乎很好。

+0

它將如何改變它?所以不是從左邊檢查,而是從右邊檢查。 – Infested

+0

@Infested no檢查分割中的兩個元素是否相等,以便OP不會錯過分割兩個分區的對。 –

+0

它的工作原理!你能給我一點解釋嗎? –