我想检查数组中的重复值

嗨,我很高兴知道这个网站提问。 我有一个问题,我做了一个数组。 然后我想检查数组中的匹配值。 例如,

int array[5]={1,2,4,2,5} ; 

因此,在array[1]array[3]重复值2。 那么如何检查重复值?

使用for / if是检查相同值的唯一方法吗?

差不多。 至少,是做你想做的最简单的方法。 如果您需要控制事件或类似事件,可能Map类型更适合您。

你如何使用“qsort”?

 qsort(( void * )array, 5 , sizeof( data[0] ) , my_sort ); 

my_sort是一个创建自己的函数。 例如,

 int my_sort( const void * a , const void * b ) { if( *( int * )a < *( int * )b ) { return -1; } else if( *( int * )a == *( int * )b ) { // You can check here. return 0; } return 1; } 

这取决于你的数组上的int的大小是否有界限。

如果您可以确定(并检查)arrays中的所有元素都被限制在相对较小的范围内(例如,介于0到255之间),则可以使用单独的MAXVAL-MINVAL数组来跟踪其中的位置。数组首先出现每个元素。 如果是这种情况,您可以快速检入O(n)(其中n是数组的大小)是否(甚至在哪里)有重复项。

它可能看起来像这样(警告:我没有检查甚至编译此代码)

 #define COUNTOF(x) ( sizeof(x) / sizeof((x)[0]) ) int i, flags[MAXVAL-MINVAL]; for(i=0; i 

使用类似的东西:

 int matchCount = 0; for(int i = 0;i < (sizeof(array)/sizeof(int)); i++) { for( int j=0; j<(sizeof(array)/sizeof(int)); j++) { if( i != j ) // skip when both indexes point to same location { if( array[i] == array[j] ) { matchCount++; } } } } 

以上是整数数组。 与其他大小类型的数组非常相似的代码

会计算两次匹配,所以将最终的matchCount除以2