2012-08-13 19 views
1

如果我有整數兩個數組:計數序列

a = {2,2,3,3,5,6,7,2,2,2}b = {6,-5,2,2,2,2,4,5,3,3}

和整數k = 2,它定義(連續序列的數目在兩個陣列SAME - [2,2][3,3][2,2,2] in「a」/ [2,2,2,2],[3,3] in「b」),如何爲每個數字序列運行單獨的計數?

我想這樣的算法:

int count = 1; 
for (int i=0; i<N; i++){ 
    if (a[i] == a[i+1] && b[i] == b[i+1] && a[i] == b[i]){ 
     count++; 
    } 

    if (count >= k){ 
     condition = true; 
    } 
} 

爲元素的每個序列可以保證數是準確的開始「計數」的一個,但這樣一來,檢查第二和第三時數組a的位置,它也將計數元素3而不是停止在2

有什麼建議嗎?

+2

你會溢出數組,除非你在你的循環中改變爲i mathematician1975 2012-08-13 12:59:00

+0

@ mathematician1975是的,N是數組的大小,我試圖設置for循環但是,它似乎不工作,因爲他也計算了「3」元素,增加了計數 – 2012-08-13 13:05:32

+0

if(a [i] == a [i + 1] && b [i] = = b [i + 1] && a [i] == b [i] && count <= k')?不過最好使用'count <= k && a [i] == a [i + 1] && b [i] == b [i + 1] && a [i] == b [i]' – 2012-08-13 13:51:55

回答

2

看到你的評論「該函數是布爾值」,我想你想知道是否有一串長度相同的數字k或更多,這是兩個輸入數組的子序列。

看起來,子序列不必出現在兩個數組中的相同位置(否則練習將不太有趣)。

假設我的猜測是正確的,你可以使用以下的想法:

  1. 檢查所有對位置(p1,p2),其中p1的第一個陣列中的位置,並p2是第二陣列中的位置。
  2. 使用範圍0...N-k爲位置,以避免溢出(讀取過去一個數組的末尾)
  3. 對於每一對的位置,檢查k號碼開始在這些位置是否相同
  4. 如果它們是對於至少一對位置相同,結果是true;否則false

,可以使用兩個嵌套循環來實現(1)和(2),像這樣:

for (p1 = 0; p1 <= N - k; ++p1) 
{ 
    for (p2 = 0; p2 <= N - k; ++p2) 
    { 
     ... 
    } 
} 

可以使用一個單獨的函數或嵌套循環來檢查條件(3) 。

+0

你已經完全明白我必須做什麼,感謝提示,非常有用。 :) – 2012-08-13 23:45:05