zoukankan      html  css  js  c++  java
  • 求数组中反复次数最多的元素

    1.问题描写叙述

      比如:数组a={2,3,1,5,5,5,5,7,8,1}。元素2、3、7、8各出现1次。1出现两次。5出现4次,则反复次数最多的元素为5.


    2. 方法与思路

    2.1 以空间换时间,索引法

      定义一个数组int cnt[MAX],将其元素所有初始化为0。然后遍历数组a。运行cnt[a[i]]++操作。最后在cnt数组中找最大的数。相应的数即为反复次数最多的数。


      代码示比例如以下:
      

    //以空间换时间,索引法
    int MaxFreq_index(int a[],int n)
    {
        int i,j;
        int max = a[0];
    
        //求出最大值,以分配计数数组空间
        for(i = 1; i < n; i++)
            if(a[i] > max)
                max = a[i];
    
        int *cnt = new int[max];
    
        for(i =0; i < max; i++) cnt[i]=0;
    
    
        max = 0;
        for(i = 0; i < n; i++)
        {
    
            if( ++cnt[a[i]] >= cnt[max] )
            {
                max= a[i];
            }
        }
    
        return max;
    }

    2.2 map映射法

      使用map键值对来记录元素的出现次数。键为元素。值为键相应出现的次数。

    时间复杂度为o(n)。

    #include <map>
    ...
    
    int MaxFreq_map(int a[],int n)
    {
        map<int,int> mp;
        int i,maxfreqNum=0;
    
        for(i = 0; i < n; i++)
            if( ++mp[a[i]] >= mp[0] )
                maxfreqNum = a[i];
    
        return maxfreqNum;
    }
  • 相关阅读:
    树的直径
    POJ3264 Balanced Lineup
    [mock]10月11日
    POJ1062 昂贵的聘礼
    POJ3295 Tautology
    [topcoder]TopographicalImage
    POJ1753 Flip Game
    [leetcode]Copy List with Random Pointer
    [leetcode]Candy
    [leetcode]Gas Station
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6946622.html
Copyright © 2011-2022 走看看