C 我想检查数组中的重复值
嗨,我真的很高兴知道这个网站的问题。我有一个问题,我做了一个数组。然后我要检查数组中的匹配值。比如说,C 我想检查数组中的重复值,c,C,嗨,我真的很高兴知道这个网站的问题。我有一个问题,我做了一个数组。然后我要检查数组中的匹配值。比如说, int array[5]={1,2,4,2,5} ; 因此,值2在数组[1],数组[3]中重复。那么如何检查重复的值呢 如果是检查相同值的唯一方法,则对/使用 使用类似于: int matchCount = 0; for(int i = 0;i < (sizeof(array)/sizeof(int)); i++) { for( int j=0; j<(sizeof(ar
int array[5]={1,2,4,2,5} ;
因此,值2在数组[1]
,数组[3]
中重复。那么如何检查重复的值呢
如果是检查相同值的唯一方法,则对/使用 使用类似于:
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++;
}
}
}
}
int matchCount=0;
对于(int i=0;i<(sizeof(数组)/sizeof(int));i++)
{
for(int j=0;j非常合适。至少,这是做你想做的事情最简单的方法。如果你需要控制视力或类似情况,也许地图类型更适合你。你如何使用“qsort”
“我的排序”是一个创建您自己的排序的函数。
比如说,
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 my_排序(常量无效*a,常量无效*b){
如果(*(int*)a<*(int*)b){
返回-1;
}
其他的
如果(*(int*)a==*(int*)b){
//你可以在这里查一下。
返回0;
}
返回1;
}
这取决于数组中int的大小是否有界限
如果可以确保(并检查)数组中的所有元素都被限制在一个相对较小的范围内(例如,在0和255之间),则可以使用大小为MAXVAL-MINVAL的单独数组来跟踪每个元素在数组中首次出现的位置。如果是这种情况,则可以快速检查O(n)(其中n是数组的大小)是否(甚至在任何地方)都有重复的
它可能看起来像这样(注意:我还没有检查或编译这段代码)
#定义计数(x)(sizeof(x)/sizeof((x)[0]))
int i,标志[MAXVAL-MINVAL];
对于(i=0;isizeof(array)/sizeof(int)
->sizeof(array)/sizeof(*array)
,忘了其他大小的类型,他说是对于/如果
唯一的方法,所以我相信你应该告诉我是的,这是唯一的方法。。。
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;
}
#define COUNTOF(x) ( sizeof(x) / sizeof((x)[0]) )
int i, flags[MAXVAL-MINVAL];
for(i=0; i<COUNTOF(flags); i++) flags[i]=-1; // Initialize flags to 'not found'
for(i=0; i<COUNTOF(array); i++)
{
if (flags[array[i]-MINVAL]!=-1) // Duplicate value found
printf("Value %d was found in positions %d and %d\n",array[i], i, flags[array[i]-MINVAL]);
else // Value had not been found before
flags[array[i]-MINVAL]=i; // Keep track of where first seen
}