求数组中反复次数最多的元素

Posted mfmdaoyou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求数组中反复次数最多的元素相关的知识,希望对你有一定的参考价值。

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;
}

以上是关于求数组中反复次数最多的元素的主要内容,如果未能解决你的问题,请参考以下文章

从数组中找到元素出现次数最多的元素

数组中求出现两次的元素

numpy如何查找数组中个数最多的元素

如何求出数组中出现次数最多的数字(C#实现)

怎样求数组中元素重复的次数

如何获取数组中出现次数最多的字符串?