数组中出现最多的元素
发布时间: 2015年10月6日 10:35 时间限制: 1000ms 内存限制: 256M
描述
给你一个数组,输出里面出现超过1/2的元素。保证有且只有一个解。
输入
第一行是一个整数,表示测试数据的组数 n,n < 1000万 之后每一行都是一个整数。
输出
输出出现超过1/2的那个数字。
样例输入1 复制
5
1
1
1
2
3
样例输出1
1
解题思路:
分析数据规模很大,就需要考虑时间复杂度较低的方法.
出现最多的数的次数大于n/2,那么就维护一个数,和他出现的次数.
如果下一个数和当前维护的数相同,cnt++,否则cnt–.
如果cnt <= 0,那么更新维护的这个数.
AC代码
#include<stdio.h>int main()
{
int loop;
int a = 0;
int cnt = 1;
scanf("%d",&loop);
int temp;
while(loop--)
{
scanf("%d",&temp);
if(a != temp)
cnt--;
else
cnt++;
if(cnt < 0)
{
a = temp;
cnt = 1;
}
}
printf("%d",a);
return 0;
}