计算k个元素的序列

时间:2012-08-13 12:56:31

标签: c algorithm integer sequences

如果我有两个整数数组:

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”/ {{ 1}},{b}中的[2,2,2,2],如何为每个数字序列运行单独的计数?

我以这种方式思考算法:

[3,3]

对每个元素序列开始“计数”可以确保计数是精确的,但是这样,当检查数组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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

看到你的评论“函数是布尔值”,我想你想知道是否有一个相同数量的长度k或更多的序列,这是两个输入数组的子序列。

似乎子序列不必出现在两个数组中的相同位置(否则练习就不那么有趣了。)

假设我猜对了,你可以使用以下想法:

  1. 检查所有位置对(p1,p2),其中p1是第一个数组中的位置,p2是第二个数组中的位置。
  2. 使用范围0...N-k作为位置,以避免溢出(读取超过数组末尾)
  3. 对于每对位置,检查从这些位置开始的k数字是否相同
  4. 如果至少一对职位相同,则结果为true;否则false
  5. 您可以使用两个嵌套循环来实现(1)和(2),如下所示:

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

    您可以使用单独的函数或嵌套循环来检查条件(3)。