首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么在C++中判断两个数组是否环型相等

2013-03-14 
如何在C++中判断两个数组是否环型相等环型相等指的是1,3,2 和 2,1,3相等。这个题应该的算法应该怎么写?我是

如何在C++中判断两个数组是否环型相等
环型相等指的是1,3,2 和 2,1,3相等。

这个题应该的算法应该怎么写?我是这样想的
(1)定义两个迭代器i1、i2分别指向两个数组a[] b[]的首元素,
(2)i1逐步加一,遍历a[]
(3)当遇到与b[]的首元素相同的元素时,i1、i2同时加一,比较i1、i2的值
(4)若迭代器的值仍相等则重复(2)操作
(5)若不相等,则i2减一(回到原来位置),重复(2)操作
这样的思路对么,可是我不知道该用什么样的算法实现。请大侠指教!
[解决办法]

引用:
123之后,
i1、i2同时+1,比较,直到i1末尾为止,然后i1指向头部比较,然后i1、i2同时+1,直到i2末尾为止

想简单了,数字大概是可以重复的,这样就比较麻烦了
如果空间不是问题的话,直接建立一个2倍空间的数组储存数据比如1,3,2变为1,3,2,1,3,2然后顺序memcmp即可
[解决办法]
#include <iostream>
using namespace std;

bool compareArray(int *n1 ,int *n2 ,int n)
{
int *p1 = n1;
int *p2 = n2;
int i = 0;
l1:for (; i != n; ++i,p2++)
{
if (*p1 == *p2)
{
break;
}
}
p2 = n2;
if (i == n)
{
return false;
}
else
{
for (int j = 1; j != n; ++j)
{
if (p1[j] != p2[(j+i)%n])
{
goto l1;
}
}
}
return true;
}


int _tmain(int argc, _TCHAR* argv[])
{
int n1[5] = {2 ,1 ,2 ,8 ,10};
int n2[5] = {1 ,2 ,8 ,10 ,2};
compareArray(n1 ,n2 ,5)? cout << "true" << endl :cout << "false" << endl;
return 0;
}

[解决办法]

常规方法,化为一个在b串中查找a串的问题,循环查找,注意设置最大查找长度,为2N-1,可以参考KMP算法

这样复杂度最高可以达到O(3N).

热点排行