题干:
描述
给你一个数组,输出里面出现超过1/2的元素。保证有且只有一个解。
输入
第一行是一个整数,表示测试数据的组数 n,n < 1000万 之后每一行都是一个整数。
输出
输出出现超过1/2的那个数字。
输入样例 1
511123输出样例 1
1提示
不要使用 cin,测试数据很大。将时间复杂度降到 O(n)解题报告:
AC代码:(三种)
#include<cstdio>#include<queue>#include<cstring>#include<cmath>#include<map>#include<iostream>#include<algorithm>#define ll long long#pragma GCC optimize(2)const ll mod = 1e9+7;using namespace std;int n;ll a[10000000 +5];int main(){int n,res;ll tmp;scanf("%d",&n);res = n/2+1;for(int i = 1; i<=n; i++) {scanf("%lld",&a[i]);}sort(a+1,a+n+1);printf("%lld",a[res]);return 0 ;}//#include<cstdio>//#include<queue>//#include<cstring>//#include<cmath>//#include<map>//#include<iostream>//#include<algorithm>//#define ll long long//const ll mod = 1e9+7;//using namespace std;//int n;//ll a[10000000 +5];//map<ll,int> mp;//int main()//{//int n,res;//ll tmp;//scanf("%d",&n);//res = n/2+1;//for(int i = 1; i<=n; i++) {//scanf("%lld",&tmp);//mp[tmp]++;//}//map<ll,int> :: iterator it;//for(it = mp.begin(); it!=mp.end(); ++it) {//if(it->second >= res) printf("%lld\n",it->first);//}////return 0 ;//}////#include<bits/stdc++.h>//using namespace std;//int main()//{// int n;// scanf("%d",&n);// int temp,time=0,a;// for(int i=0;i<n;i++)// {// scanf("%d",&a);// if(time==0)// {// time=1;// temp=a;// }// else if(temp==a)// {// time++;// }// else// {// time--;// }// }// printf("%d\n",temp);//}