找水王1
2016-05-20 18:57
141 查看
一、题目与要求
题目、三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
要求、如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、设计思想
排序法:由于该“水王”发帖数目超过了帖子数目的一半,将列表中的ID从小到大进行排序,则中间的ID即为水王。但由于其时间复杂度不满足要求,因此需要采用更便捷的方法。
每次删除两个不同的数,因为“水王”发帖数过半,因此删除这俩数后“水王”发帖数依旧过半,若两ID相同则利用标志key++,key>0且两ID不同时key--。
三、源代码
四、运行结果:
五、心得体会
这次找水王的程序体现了代码优化的一个重要思想,那就是对于问题的深入分析是优化的前提,由题目我们可以知道,水王是发帖数超过一半的人,所以只要由小到大排序,中间的ID就是水王的ID,但是这样做并不是较为优质的解法,通过比较并删除不同的ID最后得到的也是水王的ID,这种解法就比较符合简洁、高效的原则了。
题目、三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
要求、如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
二、设计思想
排序法:由于该“水王”发帖数目超过了帖子数目的一半,将列表中的ID从小到大进行排序,则中间的ID即为水王。但由于其时间复杂度不满足要求,因此需要采用更便捷的方法。
每次删除两个不同的数,因为“水王”发帖数过半,因此删除这俩数后“水王”发帖数依旧过半,若两ID相同则利用标志key++,key>0且两ID不同时key--。
三、源代码
//找水王,信1301-1,李青 2016/5/20 #include<iostream> using namespace std; int main() { int key = 0; int king = 0; int i = 0; int array[] = { 5, 5, 3, 5, 3, 3, 5, 5, 3, 3, 4, 3, 2, 3, 5, 3, 7, 5, 3, 2, 5}; for (i = 0; i<20; i++) { if (key == 0) { king = array[i]; cout << "目前的水王是:" << array[i] << endl; key = 1; } else { if (king == array[i]) { key++; } else { key--; } } } cout << "水王的ID是:" << king<< endl; return 0; }
四、运行结果:
五、心得体会
这次找水王的程序体现了代码优化的一个重要思想,那就是对于问题的深入分析是优化的前提,由题目我们可以知道,水王是发帖数超过一半的人,所以只要由小到大排序,中间的ID就是水王的ID,但是这样做并不是较为优质的解法,通过比较并删除不同的ID最后得到的也是水王的ID,这种解法就比较符合简洁、高效的原则了。
相关文章推荐
- echarts图表点击事件之跳转页面和加载页面
- 多线程递归拷贝多层目录文件
- 运算符重载实例
- 苹果通知开发者 iAd 广告平台即将关闭,API 将停用
- 课堂测试-找水王
- zookeeper
- jQuery实现通知自动消失
- 【bzoj4603】【SDOI2016】【平凡的骰子】【计算几何】
- 如何使用iAd在应用程序中展示Banner广告
- 充电桩解决方案-计费控制单元
- 2. Add Two Numbers(Linked List)
- 剑指Offer——求1-n的和值
- Android 第一次接触Matrix
- 在Windows下搭建C++11 编译环境(附下载,包括mingw-build,TDM-GCC, nuwen MinGW Distro)
- 简单视频播放软件设计
- Man——send(2)翻译
- Eclipse 4.4(luna) 安装fatjar插件时报错的问题
- sixth-多视图应用
- EventBus的使用与深入学习
- 理解A*寻路算法具体过程