数组主元素(2013考研题)

【问题描述】

已知一个整数序列A长度为N其中若存在a且a的个数大于N/2则称为A的主元素

例如0 5 5 3 5 7 5 5 则为主元素 5

又如0 5 5 3 5 1 5 7则中没有主元素。

假设中的个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出的主元素。若存在主元素则输出该元素否则输出-1


【输入形式】

一个整数数组
【输出形式】

主元素
【样例输入】

0 5 5 3 5 7 5 5
【样例输出】

5
【样例说明】


【评分标准】

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int q[99999],num[99999];
int main()
{
	string s;
	getline(cin,s);
	int z=0,js=1;
	while(s[z++]==' ')
	 {
	 	
	 }
	num[1]=s[z-1]-'0';
	while(1)
	 {
	 	if(s[z]>='0'&&s[z]<='9')
	 	 {
	 	 	num[js]*=10;
	 	 	num[js]+=s[z]-'0';
		  }
		else
		 {
		 	q[num[js]]+=1;
		 	
		 	if(s[z]=='\0')
		 	 {
		 	 	break;
			  }
			js++;
		 }
		z++;
	 }
	for(int i=1;i<=js;i++)
	 if(q[num[i]]>js/2)
	  {
	  	printf("%d",num[i]);
	  	return 0;
	  }
	printf("-1");
	return 0;
} 

  

上一篇:河北腾讯云代理商哪家好


下一篇:【bfs】廉价最短路径(2013特长生 T4)