求數組中反復次數最多的元素
阿新 • • 發佈:2017-06-05
down add 時間復雜度 空間 append 鍵值對 Language trac mod
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;
}
求數組中反復次數最多的元素