找“水王”

一、实验要求

三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个水王,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?要求时间复杂度为O[N]

二、设计思想

排序法:由于该“水王”发帖数目超过了帖子数目的一半,将列表中的ID从小到大进行排序,则中间的ID即为水王。但由于其时间复杂度不满足要求,因此需要采用更便捷的方法。

每次删除两个不同的数,因为“水王”发帖数过半,因此删除这俩数后“水王”发帖数依旧过半,若两ID相同则利用标志key++,key>0且两ID不同时key--。具体实现过程如下:

三、代码

 1 // KingofNavy.cpp : 定义控制台应用程序的入口点。

 2 //

 3 

 4 #include "stdafx.h"

 5 #include"iostream"

 6 using namespace std;

 7 

 8 int main()

 9 {

10     int key=0;

11     int king=0;

12     int i=0;

13     int array[]={5,5,3,5,3,3,3,5,3,3,4,3,2,3,5,3,7,3,3,2,3};

14     for(i=0;i<20;i++)

15     {

16         if(key==0)

17         {

18             king=array[i];

19             cout<<"Now the King of Navy is:"<<array[i]<<endl;

20             key=1;

21         }

22         else

23         {

24             if(king==array[i])

25             {

26                 key++;

27             }

28             else

29             {

30                 key--;

31             }

32         }

33     }

34     cout<<"The ID of King of Navy is:"<<king<<"!"<<endl;

35     cout<<"OVER..."<<endl;

36     return 0;

37 }
四、测试结果
找“水王”
五、总结
遍历的方法很简单,但不总是符合要求,因此,多一些思考问题的方式总是好的。

 

你可能感兴趣的:(找“水王”)