找出一个数组中出现次数最大的数
描叙:一大堆数据里面,数字与数字之间用空格隔开,找出出现次数最多的一个数字的算法
#include<stdio.h> void FindMostTimesDigit(int *Src , int SrcLen) { int element , has = SrcLen; int MaxNum , TempCount = 0 , MaxCount = 0; int i , j , *result = new int[]; while(0 != has) { TempCount = 0; element = Src[has - 1]; for(j = has - 1 ; j >= 0 ; --j) { // 如果找到,则计数加1,然后将数据和末尾交换 // 这也是为何要从末尾开始循环的理由 if(element == Src[j]) { TempCount++; // 把后面的数据移动到前面来 Src[j] = Src[has - 1]; has--; } } if(TempCount > MaxCount) { MaxCount = TempCount; MaxNum = 0; result[MaxNum] = element; } else if(TempCount == MaxCount) { result[++MaxNum] = element; } } printf("出现最多的次数:%d\n" , MaxCount); for(i = 0 ; i <= MaxNum ; ++i) { printf("%d " , result[i]); } printf("\n"); } int main() { int list[]={1,2,3,4,3,3,2,2,1,1,4,4,4,1,2}; int length =sizeof(list) / sizeof(int); FindMostTimesDigit(list, length); return 0; }
C++解法如下:
1 #include<iostream> 2 #include<map> 3 #include<utility> 4 using namespace std; 5 6 int main() 7 { 8 map<int , int> word_count; 9 int number; 10 while(cin>>number) 11 { 12 pair<map<int , int>::iterator , bool> ret = word_count.insert(make_pair(number , 1)); 13 if(!ret.second) 14 ++ret.first->second; 15 } 16 17 for(map<int , int>::iterator iter = word_count.begin() ; iter != word_count.end() ; ++iter) 18 cout<<(*iter).first<<"\t\t" 19 <<(*iter).second<<endl; 20 21 return 0; 22 }
更简洁的方法如下:
1 #include<iostream> 2 #include<map> 3 #include<utility> 4 using namespace std; 5 6 int main() 7 { 8 map<int , int> word_count; 9 int number; 10 11 while(cin>>number) 12 ++word_count[number]; 13 14 for(map<int , int>::iterator iter = word_count.begin() ; iter != word_count.end() ; ++iter) 15 cout<<(*iter).first<<"\t\t" 16 <<(*iter).second<<endl; 17 18 return 0; 19 }
网上看到一哥们也写了类似的东西:http://blog.csdn.net/tianmohust/article/details/7514618
微信公众号:
猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。