使用计数。它给出了数组的值只能在1到100之间。看来我的功能不正确我不明白为什么。 这是我的功能:
int CheckPermutation3(int arr1[], int arr2[], int size)
{
int count1[100], count2[100]; //the size 100 because in that case values are only between 1 and 100//
int i;
for(i=0; i<100; i++)
{
count1[i]=0;
count2[i]=0;
}
for(i=0;i<size;i++) //counting the elements of each array//
count1[arr1[i]]++;
for(i=0;i<size;i++)
count2[arr2[i]]++;
for(i=0;i<100;i++) //comparison//
if (count1[i]!= count2[i])
return 0;
return 1;
}
答案 0 :(得分:1)
您的实现没有任何问题:唯一的原因是项目超出范围,因为这会导致未定义的行为。
您可以通过使用单个数组来简化代码,如下所示:
int balance[100] = {0}; // Initialize all elements to zero
for (i = 0 ; i < size ; i++) {
balance[arr1[i]-1]++;
balance[arr2[i]-1]--;
}
for(i=0;i<100;i++) {
if (balance[i] != 0) {
return 0;
}
}
return 1;
答案 1 :(得分:0)
似乎只有一个问题,为什么它可能无法正常工作。
在索引为[0-99]的数组中,存储的值介于1到100之间[包含,我猜]。
因此,如果arr1 [i]值为100,那么它就会在此处中断。
count1[arr1[i]]++;
因为你试图增加count1 [100]超出范围。
同样,如果arr2 [i]值为100,它就会在此处中断。
count2[arr2[i]]++;
解决这个问题:
1.创建一个101大小的数组。
2.从1到100迭代[包括]
for(i=1;i<=100;i++) //comparison//
if (count1[i]!= count2[i])
return 0;
如果你想节省一些空间,让数组大小为100,
这样做
count1[arr1[i]-1]++;
同样,对于arr2
count2[arr2[i]-1]++;
这样您就可以将每个值存储在数组中的prev值的位置。 [0th indexing]