数组中出现次数超过一半的数字
2016-05-31 22:58
239 查看
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解题思路:
将数组按大小排序,若存在数字出现次数超过数组长度的一般,则数组中位数必定为该数字 。
(1)将数组排序完成后,取array的中位数,与数组其他数字比较大小每重复一次,计步器loopNum加一
(2)判断loopNum是否大于数组长度的一半。true时,返回array中位数;false时,返回0。
实际代码:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解题思路:
将数组按大小排序,若存在数字出现次数超过数组长度的一般,则数组中位数必定为该数字 。
(1)将数组排序完成后,取array的中位数,与数组其他数字比较大小每重复一次,计步器loopNum加一
(2)判断loopNum是否大于数组长度的一半。true时,返回array中位数;false时,返回0。
实际代码:
public int MoreThanHalfNum_Solution(int [] array) { if (array.length==0) return 0; //数组长度为0时,return 0; if (array.length==1) return array[0]; //数组长度为1时,return array[0]; int n = array.length; int m = array.length; int loopNum=0; boolean find =false; for (int i = 0; i < n; i++) { for (int j = 0; j < n-1; j++) { if (array[j] > array [j+1]) { int num = array[j]; array[j] = array[j+1]; array[j+1] = num; } } n--; //每遍历一次后,第二次遍历数组长度-1; } //排序 for (int i = 0; i < array.length; i++) { if (array[m/2]==array[i]) loopNum++; //将数组中位数与数组中每一个数组比较。重复后loopNum+1; if (loopNum>m/2) find =true; //判断 } if (find) { return array[m/2]; }else { return 0; } //return } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树