杭电OJ1029题C++实现

2023-03-08,

解题思路:因为要求的数出现的次数总是比其他数字出现的次数多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;
}

杭电OJ1029题C++实现的相关教程结束。

《杭电OJ1029题C++实现.doc》

下载本文的Word格式文档,以方便收藏与打印。