2016-12-01 84 views
0

假設我有一個數字x的斐波那契數列如下,我想檢測一個數組中的序列。 Java方法應該返回序列在java中找到整型數組中的模式長度?

x   0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 
1)x mod 2 - 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 
2)x mod 3 - 0 1 1 2 0 2 2 1 0 1 1 2 0 2 2 1 

Answer 1) 3 (repetitive sequence 011 and length is 3) 
     2) 8 (repetitive sequence 01120221 and length is 8) 
的長度
+1

是否要包含Fibonacci序列的或任意數據模數值數組做到這一點明確?如果是斐波那契數列模數值,當遇到第二個0時,序列會重複,然後是1. – samgak

+0

是的,對於斐波那契數列 – vk1

回答

1

一個非常簡單的方法將是創建陣列的拷貝,並檢查所述第一陣列的位置0對第二陣列的1的位置,並且如果它們匹配,繼續檢查直到結束。如果整個事物匹配,則重複長度爲1.

如果不是,則將第一個數組的位置0與第二個數組的位置2進行比較,並按照上述相同的過程。如果匹配,則重複長度爲2.

然後繼續此過程,直到找到匹配項或達到數組的末尾並且無法進一步抵消爲止,在這種情況下,不重複。

1

如果您只是打算專門用於Fibonacci序列中的數值模數值,而不是任意數據,那麼只要您發現第二次出現0,然後是1,就會重複該序列模數序列。這是因爲mod(a + b,n)= mod(mod(a,n)+ mod(b,n),n),所以Fibonacci序列中的一個數的模(它是前兩個值)由前面的2個模數結果確定。因此,一旦0的原始模式再次出現1,模式將重複。

+0

得到它,這是有效的! – vk1

1

下面的代碼工作:

private static int detectSequence(int[] array) { 

    int count = 2; 
    for (int i = 2; i < array.length; i++) { 
     if(array[i] == 0 && array[i+1] == 1 && i+1 < array.length){ 
      return count; 
     } 
     count++; 
    } 
    return count; 

}