统计数组中每个数字出现的次数

夙诺 2011-08-14 06:02:58
有一个二维数组,比如说是下面的这个

1 2 3 4
2 3 4 5
1 3 5 7

想要统计其中每个数出现的次数,如上矩阵的话就是1出现了2次,2出现了2次,3出现了3次...
我的想法是定义一个临时变量依次取整个矩阵中的值,遍历整个矩阵,找到与临时变量相等的值,同时还可以定义一个标志数组,已经统计过数字的位置上标志数组值为0,未统计的为1,这样在遍历数组的过程中可以有个判断,减少一些计算量。不知道各位有没有什么其他简单高效的算法?
...全文
1687 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
商科程序员 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 genio 的回复:]
数据范围多少?不大的话,就int count[maxnum], 遍历,count[num]++;

大的话,用STL map, mp<int(num),int(count)> m; 遍历, map[num]++;
[/Quote]想高效,用这个
lwbjiuqi 2011-08-15
  • 打赏
  • 举报
回复
为什么遍历这么多遍?
像genio说的 用字典不就成了么
夙诺 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iamhby 的回复:]

无论 0 有没有,先遍历一次0 值,
之后从头遍历 ,相同的数值为 改为 0,
下次选遍历值为 0 跳过....

I<=菜鸟 路过.....
[/Quote]
这个不错~~~谢啦
nuptxxp 2011-08-14
  • 打赏
  • 举报
回复
ls正解
帆满 2011-08-14
  • 打赏
  • 举报
回复
无论 0 有没有,先遍历一次0 值,
之后从头遍历 ,相同的数值为 改为 0,
下次选遍历值为 0 跳过....

I<=菜鸟 路过.....
genio 2011-08-14
  • 打赏
  • 举报
回复
数据范围多少?不大的话,就int count[maxnum], 遍历,count[num]++;

大的话,用STL map, mp<int(num),int(count)> m; 遍历, map[num]++;
探险者 2011-08-14
  • 打赏
  • 举报
回复
刚看到题目,我自己随便写了下,感觉不是很好,共求更好的解法...


#include <stdio.h>

int main(void)
{
//函数声明
void sortArr(int arr[],int length) ;
void countFun(int arr[],int i,int length);

//初始化数组
int a[12] = {1,2,3,4,2,3,4,5,1,3,5,7};
int i = 0 ;

//调用排列数组接口
sortArr(a,12);

//调用统计接口
countFun(a,0,12);

return 0 ;
}

//排列数组
void sortArr(int arr[],int length)
{
int i,j,k,tmp ;
for(i=0;i<length-1;i++)
{
k = i ;
for(j=i+1;j<length;j++)
{
if(arr[j]<arr[k])
{
k = j ;
}
}
if(k!=i)
{
tmp = arr[i] ;
arr[i] = arr[k] ;
arr[k] = tmp ;
}
}
}


//统计个数
void countFun(int arr[],int i,int length)
{
int top = arr[i] ;
int sum = 0 ;

while(arr[i]==top && i<length)
{
sum ++ ;
i++ ;
}

if(arr[i]!=top)
{
printf("数组 %d 共出现:%d次\n",top,sum);

if(i<length)
{
//递归调用
countFun(arr,i,length);
}
}

}

33,009

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧