数字之魅——寻找发帖水王
来源:互联网 发布:c语言中字符串处理函数 编辑:程序博客网 时间:2024/06/08 05:16
寻找发帖水王这个题目给了我很大的启发,同时开阔了视野,往往在解决这类型问题的时候第一想法都是先排序再计算。而本题却给出了一个非常好的思路,时间复杂度为O(N)。
它还有一个扩展问题,但是我在网上看了几篇有的写的考虑不周全,有的写的逻辑不是很清楚,这里我也根据思考和查阅,给出我自己的解法。
typedef int Type; //给出Id的一个抽象Type candidate[3] = {0}; //说明传的这个参数前要初始化。void find3(Type* ID,int N,Type* candidate){ int i;int nTimes[3] = {0}; for(i=0;i<N;i++){ if(nTimes[0] == 0){ if(candidate[1] == ID[i]){ nTimes[1]++;continue; } else if (candidate[2] == ID[i]){ nTimes[2]++;continue; } candidate[0] = ID[i]; } else if(nTimes[1] == 0){ if(candidate[0] == ID[i]){ nTimes[0]++;continue; } else if (candidate[2] == ID[i]){ nTimes[2]++;continue; } candidate[1] = ID[i]; } else if(nTimes[2] == 0){ if(candidate[0] == ID[i]){ nTimes[0]++;continue; } else if (candidate[1] == ID[i]){ nTimes[1]++;continue; } candidate[2] = ID[i]; } else if(candidate[0] == ID[i]) nTimes[0]++; else if(candidate[1] == ID[i]) nTimes[1]++; else if(candidate[2] == ID[i]) nTimes[2]++; else{ nTimes[0]--; nTimes[1]--; nTimes[2]--; } }}
这里我采用参数了作为返回值结果,一方面因为很多时候会出现下面这种情况:
Type* find3(Type* ID,int N){ //... int candidate[3] = {0}; //... return candidate;}
这样函数退出结果就没有了,candidate指向了栈的某个未知区域了。
或者
Type* find3(Type* ID,int N){
//…
int* candidate = new int[3];
//…
return candidate;
}
在find3中new,但是在哪里去释放呢。我还是比较喜欢在哪里new就在哪里delete。
最后,在判断nTimes[0] == 0的时候还要判断ID[i]与其他candidate是否相等的情况,所以我要求candidate要先初始化。
1 0
- 数字之魅——寻找发帖水王
- 编程之美(数字的魅力--寻找发帖水王)
- 数字之魅:寻找发帖“水王”
- 编程之美:第二章 数字之魅 2.3寻找发帖水王
- 算法之美——寻找发帖水王算法
- 编程之美: 第二章 数字之魅 2.3_1寻找发帖超过总帖1/4的水王
- 编程之美--寻找发帖水王
- 编程之美--寻找发帖水王
- 编程之美----寻找发帖水王
- 编程之美-寻找发帖水王
- 编程之美--寻找发帖水王
- 编程之美 寻找发帖水王
- 寻找发帖水王
- 寻找发帖水王
- 寻找发帖水王
- 寻找发帖水王
- 寻找发帖水王
- 寻找发帖水王
- IO流(复制文本文件的5种方式案例(用字符流)
- 理解inode
- MyBatis 的 resultMap
- 项目、习惯以及Todolist的区别
- tomcat性能优化详解
- 数字之魅——寻找发帖水王
- UVa 12186 - Another Crisis(树形DP)
- 调用函数实现数组升序输出
- ios沙箱路径的查看和使用
- 24 - 判断是否是二叉搜索树的后序遍历序列
- <转>JAVA学习之路,不走弯路就是捷径
- 欢迎使用CSDN-markdown编辑器
- LeetCode(64) Minimum Path Sum
- python-re模块