1160: 木棒挑战On1(三) [思维]
时间限制: 1 Sec 内存限制: 2 MB提交: 26 解决: 21 统计
题目描述
现在有n个木棒,其中有多于一半的木棒长度是相同的。
现在想要找出这些个数多于一半的木棒长度。
输入
第一行是一个整数 n ( 0<n<100000 ),代表有 n 个木棒。
下面一行有 n 个以一个空格分开的整数 ai ( 0<m<100000 ),代表木棒的长度。
输出
输出所求木棒的长度。
样例输入
5
2 2 2 3 5
样例输出
2
提示
请思考时间复杂度 O(n) 、空间复杂度 O(1)
的算法
解析:
可以先对序列进行排序,出现次数多于一半的元素肯定会出现在序列的中间位置。
程序如下:
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[100003];
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
printf("%d\n",a[n/2]);
}
return 0;
}