课堂练习-寻找水王
1.题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
2.思路
要在一个O(n)时间复杂度中实现,使用的方法是,设置计数K,设置shui=a[0]比较shui和a[i],如果这两个数不一样就跳过这个数并且K-1,如果一样就设K++,当K<0的时候就重置shui=a[i+1],结束循环后就能获得水王ID为shui
3.代码
// #include <stdafx.h> #include <iostream.h> int main(int argc, char* argv[]) { int a[100]; int tienum; int i,j,k=1; int shui; cout<<"请输入帖子总数:"; cin>>tienum; cout<<endl; for(i=0;i<tienum;i++) { cout<<"请输入第"<<i+1<<"个帖子的ID:"; cin>>a[i]; } shui=a[0]; for(i=1;i<tienum;i++) { if(shui!=a[i]) { k=k-1; if(k<0) { shui=a[i+1]; k=1; i++; } } else { shui=a[i]; k=k+1; } } cout<<"水王ID是:"<<shui<<endl; return 0; }
4.截图
5.总结
思路很巧妙,我自己已经想到了找出重复的ID做标记再与下一个重复的ID做比较处理,在看了别人的博客后才受启发,可以把重复的数量做计数来比较。