假设我有一个数字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)
答案 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;
}