编程之美第2.3题————寻找发帖“水王” 题目描述: Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗? 首先,我们可以假设有这样一个数据结构来表示帖子 [cpp] type struct post { char* title; char* content; int uid; }post_t; [/cpp] 题目告诉我们已知所有帖子的列表,也就是说我们知道了所有帖子的链表 post_t* post_list,或者是所有帖子的数组post_array[num]。然后让我们找到出现次数最多的uid是多少,并且该uid一定超过了总和的一半。为了叙述方便,下面用数组举例。最容易就想到的方法,就是遍历整个数组,记录每一个uid出现的次数,然后再比较一下,求出最大的。 其实,这个问题就可以等价于:求数组中出现次数大于一半的那个数 解法一 对数组排序,然后遍历排好序的数组,统计各ID出现的次数,找到超过一半的那个即可。代码如下: [cpp] int Find (int* post, int len) { sort(post, post + len); int num = 1; for(int i = 0; i < len; i++) { if(post[i] == post[i + 1]) num++; else num […]
寻找发帖“水王”
- Post author By David
- Post date
- Categories In Study, 编程之美
- No Comments on 寻找发帖“水王”