关于数组,怎么将一个整型数组中的重复数字找出来并记录其重复的次数
关于数组,如何将一个整型数组中的重复数字找出来并记录其重复的次数?
我原来是通过排序后比较做的,发现只能把原来数组里的重复项去掉.
而要求是只出现一次的数字不用复制,只复制出现过两次以上的,而且要把重复的次数记录下来.不知道该如何实现.
请教各位高手了
------解决方案--------------------
void find_dupli(int * n ,int size, map <int ,int> &dupmap)
{
if (n==NULL)
{
return;
}
for (int i = 0 ; i < size ; i++)
{
map <int ,int > ::iterator itr = dupmap.begin();
for ( ; itr!= dupmap.end();itr++)
{
if (dupmap.find(n[i])!=dupmap.end())
{
dupmap[n[i]]+=1;
break;
}
}
if (itr==dupmap.end())
{
dupmap[n[i]]=1;
}
}
}
------解决方案--------------------
假设数组已有序
int i,j,index,a[10]={...};
for(i=0;i <10;i++)
{
for(j=1,index=i;a[i]==a[i+j];j++)
{
i++;
}
printf( "a[%d] repeated %d times! ",index,j);
}
我原来是通过排序后比较做的,发现只能把原来数组里的重复项去掉.
而要求是只出现一次的数字不用复制,只复制出现过两次以上的,而且要把重复的次数记录下来.不知道该如何实现.
请教各位高手了
------解决方案--------------------
void find_dupli(int * n ,int size, map <int ,int> &dupmap)
{
if (n==NULL)
{
return;
}
for (int i = 0 ; i < size ; i++)
{
map <int ,int > ::iterator itr = dupmap.begin();
for ( ; itr!= dupmap.end();itr++)
{
if (dupmap.find(n[i])!=dupmap.end())
{
dupmap[n[i]]+=1;
break;
}
}
if (itr==dupmap.end())
{
dupmap[n[i]]=1;
}
}
}
------解决方案--------------------
假设数组已有序
int i,j,index,a[10]={...};
for(i=0;i <10;i++)
{
for(j=1,index=i;a[i]==a[i+j];j++)
{
i++;
}
printf( "a[%d] repeated %d times! ",index,j);
}