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

  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3201513.html
Copyright © 2011-2022 走看看