众数问题 oj17
程序员文章站
2022-05-22 14:57:56
...
众数问题
发布时间: 2017年5月25日 19:57 最后更新: 2017年5月26日 00:08 时间限制: 1000ms 内存限制: 128M
问题描述:
给定含有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 行是重数。(如果有多个众数,只输出最小的)
复制
6 1 2 2 2 3 5
2 3
#include <cstdio>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int cmp(int a, int b)
{
return a < b;
}
int main()
{
int n;
cin >> n;
vector<int> iter;
vector<int>::iterator pIter;
int *f = new int[n];
int num;
for (int i = 0; i < n; i++)
{
f[i] = 1;
scanf("%d", &num);
iter.push_back(num);
}
sort(iter.begin(), iter.end(), cmp);
for (int i = 0; i < n - 1; i++)
{
pIter = iter.begin();
for (int j = i + 1; j < n; j++)
{
if (pIter[i] == pIter[j])
{
f[i]++;
iter.erase(pIter + 1);
j--;
n = n - f[i] + 1;
}
}
}
pIter = iter.begin();
int index,flag=0;
for (int i = 0; i<iter.size(); i++)
{
if (f[i] != 1)
{
index = i;
flag = 1;
break;
}
}
pIter = iter.begin();
if (!flag)
{
vector<int>::iterator smallest = min_element(iter.begin(), iter.end());
index = distance(iter.begin(), smallest);
}
pIter = iter.begin();
cout << pIter[index] << endl << f[index];
return 0;
}
下一篇: 支付宝怎么添加杭州地铁乘车码?
推荐阅读
-
Mysql5.7中使用group concat函数数据被截断的问题完美解决方法
-
Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini及服务无法启动的快速解决办法(问题小结)
-
个人所得税app常见的五大问题及解决方法介绍
-
解决mysql ERROR 1045 (28000)-- Access denied for user问题
-
selenium处理元素定位点击无效问题
-
vs2015/vs2013中mvc5 viewbag总是出现问题该怎么办?
-
企业做SEO优化前需要考虑哪些问题?
-
企业官网SEO优化被忽略的问题 你可能想错了
-
解决Python plt.savefig 保存图片时一片空白的问题
-
NHibernate问题求大神解决!!!