杭电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;
}

posted @ 2019-07-03 17:39  wrihat  阅读(246)  评论(0编辑  收藏  举报