Chinaunix首页 | 论坛 | 博客
  • 博客访问: 395537
  • 博文数量: 70
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1179
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 20:05
文章分类

全部博文(70)

文章存档

2014年(2)

2013年(29)

2012年(20)

2011年(1)

2010年(13)

2009年(5)

分类: C/C++

2013-09-30 09:15:55

条件:水王的发帖数目超过总帖子的数目的一半

普通解法是:排序,扫描统计整个列表来统计各个ID出现的次数,出现次数最多的为水王

特殊解法:如果每次删除两个不同的ID,那么剩下的ID列表里,水王的ID出现次数仍然超过一半

通过特殊解法原来的时间复杂度从o(N*logN+N)降到了o(N)且只需要常数的额外的内存

算法代码:

#include
using namespace std;
int main(){
        int n;
        cout<<"请输入n:";
        cin>>n;
        int *arr=new int[n];
        for(int i=0;i                 cout<<"请输入ID:";
                cin>>arr[i];       
        }
        int nTimes=0;
        int candidate;
        for(int i=0;i                 if(nTimes==0){
                        candidate=arr[i];
                        nTimes=1;
                }
                else {
                        if(candidate==arr[i]){
                                nTimes++;
                        }
                        else{
                                nTimes--;
                        }
                }
        }
        cout<<"出现次数最多的ID:"<         delete(arr);
        system("pause");
        return 0;

阅读(1004) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~