1.问题描述
例如:数组a={2,3,1,5,5,5,5,7,8,1},元素2、3、7、8各出现1次,1出现两次,5出现4次,则重复次数最多的元素为5.
定义一个数组int cnt[MAX],将其元素全部初始化为0。然后遍历数组a,执行cnt[a[i]]++操作。最后在cnt数组中找最大的数,对应的数即为重复次数最多的数。
代码示例如下:
//以空间换时间,索引法intMaxFreq_index(inta[],intn){inti,j;intmax= a[0];//求出最大值,以分配计数数组空间for(i =1; i < n; i++)if(a[i] >max)max= a[i];int*cnt = newint[max];for(i =0; i = cnt[max] ) {max= a[i]; } }returnmax;}
使用map键值对来记录元素的出现次数,键为元素,值为键对应出现的次数。时间复杂度为o(n)。
#include ...intMaxFreq_map(inta[],intn){mapmp;inti,maxfreqNum=0;for(i =0; i < n; i++)if( ++mp[a[i]] >= mp[0] ) maxfreqNum = a[i];returnmaxfreqNum;}