【问题标题】:finding the pattern length in an integer array in java?在java中的整数数组中查找模式长度?
【发布时间】:2017-04-15 14:23:29
【问题描述】:

假设我有一个如下数字 x 的斐波那契数列,并且我想检测数组中的一个数列。 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 时,该序列将重复。
  • 是的,对于斐波那契数列

标签: java arrays algorithm sequence fibonacci


【解决方案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;

}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-08-04
        • 2022-01-10
        • 2011-03-05
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多