回顾

寻找发帖水王的问题总结起来就是在一个数组中某一个元素出现次数超过了数组长度的一半,那么可以很顺利的找到这个元素,实现见"编程练习:寻找发帖水王"

扩展

上面的问题中,强调了某一个元素出现次数超过了数组长度的一半,那么试想一下,如果这个元素刚好只有一半, 比如{1,2,3,1,2,1};那么按照上面的思路和实验结果,其结果是2,显然出现和预期不符合的答案。

分析

其实可以发现这个元素刚好只出现了一半,那么我们可以在遍历时同时预备两个元素,该思想要达到的效果就是能够找出数组中出现次数第一和第二多的两个变量,那么问题就迎刃而解。

实现

直接上代码, 相应的分析,上面的文章已经很透彻

/**
* @Author fanjiajia
* @Date 下午8:11 2018/12/20
* @Description 数组中某个元素出现次数刚好只有数组长度的一半,找出它
**/
public <T> T func3(T[] arr) {
T[] candidates = (T[]) new Object[2]; // 泛型类数组的创建
int[] nTimes={0,0};
for (int i = 0; i < arr.length; i++) {
if (nTimes[0] == 0) {
candidates[0] = arr[i];
nTimes[0] = 1;
}else if (nTimes[1] == 0) {
candidates[1] = arr[i];
nTimes[1] = 1;
}else if (candidates[0] == arr[i])
nTimes[0] ++;
else if (candidates[1] == arr[i])
nTimes[1] ++;
else {
nTimes[0]--;
nTimes[1]--;
}
}
return nTimes[0] > nTimes[1]? candidates[0]:candidates[1];
}

最后

生命不息,使劲造

最新文章

  1. C#开发微信门户及应用(25)-微信企业号的客户端管理功能
  2. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
  3. fastdfs 安装配置
  4. MyEclipse/Eclipse新建项目并且部署到服务器(tomcat)下
  5. BZOJ1861——book
  6. 为什么使用ConcurrentHashMap
  7. python一个简单的登录
  8. DIB位图文件的格式、读取、保存和显示(转载)
  9. HDU 5794:A Simple Chess(Lucas + DP)
  10. [hdu 3605]Escape
  11. jquery css快捷方法
  12. [原]Links
  13. (Trie) uvalive 3942 Remember the word
  14. python3.5之mysql扩展
  15. win7系统u盘安装过程
  16. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
  17. 学习笔记——Java内部类练习题
  18. php常用面试题
  19. hadoop2.6.0实践:A01 问题处理 DEPRECATED: Use of this script to execute hdfs command is deprecated.
  20. 非常不错的svg教程

热门文章

  1. the “inner class” idiom
  2. MySQL数据库主从(主主)配置
  3. iOS之出现( linker command failed with exit code 1)错误总结
  4. 编译安装GCC
  5. (第04节)集成SpringMVC框架
  6. React学习(4)——向服务器请求数据并显示
  7. ElasticSearch : 基础
  8. 搞笑入群二维码在线生成源码 php图片合成并添加文字水印
  9. python 复习函数 装饰器
  10. ruby 数据类型String