在java中查找整数数组中的模式长度?

时间:2016-12-01 03:49:25

标签: java arrays algorithm sequence fibonacci

假设我有一个数字x的Fibonacci序列如下,我想检测数组中的序列。 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)

3 个答案:

答案 0 :(得分:1)

一种非常简单的方法是创建数组的副本,并检查第一个数组的位置0对第二个数组的位置1,如果它们匹配,则继续检查直到结束。如果整个事物匹配,那么你的重复长度为1.

如果不是,则将第一个数组的位置0与第二个数组的第二个位置进行比较,并按照与上面相同的过程进行操作。如果匹配,则重复长度为2.

然后你继续这个过程,直到你找到一个匹配,或者到达数组的末尾并且不能再进一步抵消它,在这种情况下没有重复。

答案 1 :(得分:1)

如果您只是打算将此专门用于Fibonacci序列中数字的模数值,而不是任意数据,那么一旦您发现第二次出现0后跟一个1,序列就会重复模数序列。这是因为mod(a + b,n)= mod(mod(a,n)+ mod(b,n),n),所以Fibonacci序列中的数字的模数(这是前两者的总和)值)由前2个模数结果确定。因此,一旦0的原始模式再次出现1,模式将重复。

答案 2 :(得分: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;

}