问题描述
1201: 众数问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 2700 解决: 1760
题目描述
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。
多重集S中重数最大的元素称为众数。
例如,S={1,2,2,2,3,5}。
多重集S的众数是2,其重数为3。
编程任务:
对于给定的由 n 个自然数组成的多重集S,编程计算 S 的众数及其重数。
输入
第1行多重集S中元素个数n(n<=50000);
接下来的 n 行中,每行有一个自然数。
输出
输出文件有 2 行,第1 行给出众数,
第 2 行是重数。(如果有多个众数,只输出最小的)
样例输入 Copy
6
1
2
2
2
3
5
样例输出 Copy
2
3
代码&注释
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> ivec;
int tmp;
for(int i = 0; i < n; i++){
cin >> tmp;
ivec.push_back(tmp);
}
sort(ivec.begin(), ivec.end());
int num = ivec[0], last_cnt = 1, cnt = 1; // cnt is used to count num's repetition in ivec
for(int i = 1; i < n; i++){
if(ivec[i] == ivec[i - 1]){
cnt++;
}
else if(cnt > last_cnt){
last_cnt = cnt;
cnt = 1;
num = ivec[i - 1];
}
}
if(cnt > last_cnt){
last_cnt = cnt;
num = ivec[n - 1];
}
cout << num << "\n";
cout << last_cnt << "\n";
return 0;
}
知识点
vector 浅析
参看我下面写的vector介绍
=>什么是vector C++学习vector浅析