zoukankan      html  css  js  c++  java
  • 找出一个数组中出现次数最大的数

    描叙:一大堆数据里面,数字与数字之间用空格隔开,找出出现次数最多的一个数字的算法

    #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
    " , MaxCount);
    
    	for(i = 0 ; i <= MaxNum ; ++i)
    	{
    		printf("%d " , result[i]);
    	}
    	printf("
    ");		
    }
    
    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<<"		"
    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<<"		"
    16             <<(*iter).second<<endl;
    17 
    18     return 0;
    19 }

    网上看到一哥们也写了类似的东西:http://blog.csdn.net/tianmohust/article/details/7514618

  • 相关阅读:
    背景样式、列表样式、变形样式、过渡动画
    边框样式、段落样式、背景样式
    属性选择符、字体样式和元素样式
    Targets选项下Other linker flags的设置
    OC金额转大写
    输入手机号码 和 金额有效性的判断
    iOS手势冲突问题
    解决iOS手势冲突问题
    iOS开发 字符串的转化 小技巧
    iOS开发添加pch文件
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3201513.html
Copyright © 2011-2022 走看看