杭电OJ1029题C++实现
解题思路:因为要求的数出现的次数总是比其他数字出现的次数多1,所以若总是用相同的数去与其他的数相抵,那么最后只剩下一个,那就是要求的数。
另外需要注意的一点就是,最好不要去开长度为999999的数组,那样基本上时行不通的,时间复杂度也是大到吓人,一般都会超时,所以最好不要去开这么大的数组。
最关键的一点就是抓住出现次数为(n+1)/2这一特点。
#include <iostream>
using namespace std;
int main()
{
int n;
int a;
while(cin>>n)
{
int counter=0,temp;
for(int i=0;i<n;i++)
{
cin>>a;
if(counter==0)
{
temp=a;
counter=1;
}
else
if(temp==a)
{
counter++;
}
else counter--;
}
cout<<temp<<endl;
}
return 0;
}