我试图编写带有两个数组的代码,如果它们的元素匹配(顺序无关紧要)则返回1,如果它们不匹配则返回0。
我已经编写了一些不同的算法,一个比较两个数组的总和,如果它们相同则返回1,如果它们不是,则返回0,但如果数组包含不同的值元素总结到同样的事情然后这不起作用。
找到一个O(n ^ 2)很简单(两个用于循环,比较,然后迭代A的下一个位置等。
我似乎无法弄清楚这样做的O(n)。我当前的代码取值的差异,如果它的0返回1仍然不知道如何处理不排序相同的乱序数组。是否有O(n)这样做?
int scrambled( unsigned int a[], unsigned int b[], unsigned int len)
{
int count[100];
int flag = 1;
int i;
for(i=0; i<100; i++){
count[i] = 0;
}
for(i=0; i<len; i++){
count[a[i]]++;
count[b[i]]--;
}
for(i=0; i<100; i++){
if(count[i] != 0){
return 0;
}
}
return flag;
答案 0 :(得分:2)
如果您可以使用C ++ 11,std::unordered_set
可以在O(n)
时填充O(n)
,然后您可以执行O(n)
元素成员资格测试(它仍然是{{1}即使你做了两次,常数乘数也不算数。
如果C ++ 11已经用完,你仍然可以使用与手写哈希集相同的基本算法,或者如果每个元素的元素都在有界范围内,你可以使用counting sort( O(n+k)
归功于专业的数字范围,如果范围很小,则k
分量并不重要。