1. 程式人生 > >求數組中反復次數最多的元素

求數組中反復次數最多的元素

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

求數組中反復次數最多的元素