1

如果我有两个整数数组:

a = {2,2,3,3,5,6,7,2,2,2},b = {6,-5,2,2,2,2,4,5,3,3}

和一个 integer k = 2,它定义了连续序列的数量(两个数组中相同 - [2,2], [3,3], [2,2,2]in "a" / [2,2,2,2], [3,3]in "b" ),我如何为每个数字序列运行单独的计数?

我是这样想的算法:

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;
    }
}

对每个元素序列以 1 开始“计数”可以确保计数是准确的,但是这样,在检查数组的第二个和第三个位置时a,它也会对元素进行计数,3而不是在 处停止2

有什么建议么?

4

1 回答 1

2

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

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

假设我的猜测是正确的,您可以使用以下想法:

  1. 检查所有位置对(p1,p2),其中p1是第一个数组p2中的位置,是第二个数组中的位置。
  2. 使用0...N-k位置范围,以避免溢出(读取数组末尾)
  3. 对于每一对位置,检查k从这些位置开始的数字是否相同
  4. 如果至少一对位置相同,则结果为true; 除此以外false

您可以使用两个嵌套循环来实现 (1) 和 (2),如下所示:

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

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

于 2012-08-13T20:00:11.513 回答