编程之美-寻找发帖“水王”
来源:互联网 发布:沈阳沐洋软件 编辑:程序博客网 时间:2024/05/21 21:47
1. 问题描述
基础问题:找出发帖数超过帖子总数一半的ID.
拓展问题:有三人发帖数都超过了帖子总数目N的1/4,找出他们的ID.
2. 算法与解析
我们可以先排序然后找出中间的那个ID,但可以考虑避免排序来改进时间复杂度。
每次从列表删除两个不相同的ID,剩余的相同ID就是找到的“水王”。
Type Find(Type * ID, int N){Type candidate;//nTimes 是一个计数器。int nTimes, i;for (i = nTimes = 0; i < N; i++){if (nTimes == 0){//初始化或重置candidatecandidate = ID[i];nTimes++;}elseif (candidate == ID(i))nTimes++;elsenTimes--;}return candidate;}
拓展:
删除不相同的4个数,剩下的ID即是我们所要找的。
void Find3(int * ID, int N){int candidate[3] = { 0, 0, 0 };int nTimes[3] = { 0, 0, 0 };for (int i = 0; i<N; i++){if (nTimes[0] == 0){if (ID[i] == candidate[1])nTimes[1]++;if (ID[i] == candidate[2])nTimes[2]++;else{candidate[0] = ID[i];nTimes[0]++;}}if (nTimes[1] == 0){if (ID[i] == candidate[0])nTimes[0]++;if (ID[i] == candidate[2])nTimes[2]++;else{candidate[1] = ID[i];nTimes[1]++;}}if (nTimes[2] == 0){if (ID[i] == candidate[0])nTimes[0]++;if (ID[i] == candidate[1])nTimes[1]++;else{candidate[2] = ID[i];nTimes[2]++;}}else{if (ID[i] == candidate[0])nTimes[0]++;if (ID[i] == candidate[1])nTimes[1]++;if (ID[i] == candidate[2])nTimes[2]++;else{nTimes[0]--, nTimes[1]--, nTimes[2]--;}}}printf("ID分别为%d,%d,%d\n",candidate[0],candidate[1],candidate[2]);}心得:开始学习编程之美了,总想记录下来。这个题目的拓展思维蛮不错可以拓展到找到n个的问题。
0 0
- 编程之美-寻找发帖"水王"
- 寻找发帖“水王”--《编程之美》笔记
- 寻找发帖“水王”--《编程之美》笔记
- 编程之美2.3 寻找发帖“水王”
- 编程之美-2.3-寻找发帖“水王”
- 编程之美-2.3-寻找发帖“水王”
- 编程之美 2.3 寻找发帖“水王”
- 编程之美2.3 寻找发帖“水王”
- 编程之美 寻找发帖“水王”
- 编程之美2.3 寻找发帖"水王"
- 编程之美-寻找发帖“水王”
- 编程之美 2.3 寻找发帖“水王”
- 编程之美---寻找发帖“水王”
- 编程之美2.3寻找发帖"水王"
- 编程之美2.3 寻找发帖“水王”
- 读书笔记之编程之美 - 2.3 寻找发帖“水王”
- 《编程之美》之读书笔记 2.3寻找发帖“水王”
- 编程之美--2.3寻找发帖“水王”之扩展问题
- 基于ZooKeeper的Dubbo注册中心
- InvocationHandler中invoke()方法的调用问题
- 如何让AlertDialog 在点击确定或者取消时不消失
- Python 模块学习 logging(1)
- Web Sql Database 初探
- 编程之美-寻找发帖“水王”
- java中常用的数据加密算法
- Hadoop的datanode无法启动
- 函数调用时对象指针与对象引用的区别与关系
- 《精通Oracle SQL(第2版) 》
- python 模块学习 hashlib
- leetcode First Missing Positive
- Oracle Quality --- Setup Collection Element and Collection Plan
- QT平台上的Json解析