首页 > 编程语言 > 详细

杭电OJ1029题C++实现

时间:2019-07-03 19:08:45      阅读:80      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/xiaozou-zone/p/11127918.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!