題目描述
給定一個長度為N的非降數列,求數列中出現次數最多的數。
如果答案不唯一,輸出其中最小的數。
輸入格式
輸入資料第一行是一個整數T(1 <= T <= 100),表示測試資料的組數。
對于每組測試資料:
第一行是一個正整數N(1 <= N <= 100),表示數列長度。
第二行有N個整數,整數用空格隔開,所有整數都不超過105,表示這個數列。
輸出格式
對于每組測試資料,輸出一個整數。
輸入樣例
2
4
1 1 1 2
5
1 1 2 2 3
輸出樣例
1
1
題目分析
1、關于數組的建構
普通數組:
數組 1 1 1 2
下标 0 1 2 3
計數數組:
數組 0 3 1 0…
下标 0 1 2 3…
運用哈希思想,在數組中直接記錄元素出現的次數
2、數組初始化
memset(a, 0, sizeof(a));//将數組a初始化為0,第三個參數為數組a的長度
包含在<string.h>頭檔案中
數組初始化應該放在while循環中,每次對數組操作前都要初始化為0。
3、題目中有多組輸入測試資料,用while循環控制。
C:while(scanf("%d", &n) != EOF){…}
C++:while(cin >> n){…}**
注*:題目中對數組長度的要求是105,定義數組的時候可以稍微開的大一點 int a[100005];
代碼
#include <iostream>
#include <string.h>
using namespace std;
int main(){
int T, N, max,tmp,num;
int a[100005];
cin >> T;
while(T--){
cin >> N;
memset(a, 0, sizeof(a));//數組初始化為0
/*
for(int i = 0; i<100005; i++){
a[i] = 0;
}
*/
for(int i = 0; i<N; i++){
cin >> num;
a[num] = a[num] + 1;
}
max = 0;//初始化
for(int j = 0; j<100005; j++){
if(a[j] > max){
max = a[j];
tmp = j;
}
}
cout << tmp << endl;
}
return 0;
}