剑指offer--数组中出现次数超过一半的数字
2015-04-12 00:26
357 查看
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。分类:数组
解法1:使用快速排序的过程,直到找到中间位置,返回即可
public class Solution { public int MoreThanHalfNum_Solution(int [] array) { if(array.length==0) return 0; int low = 0; int high = array.length-1; int mid = (low+high)/2; int index = partition(array, 0, high); while(index!=mid){ if(index<mid){ index = partition(array, index+1, high); }else{ index = partition(array, low, index-1); } } int count = 0; for(int i=0;i<=high;i++){ if(array[i]==array[mid]) count++; } if(count<=(high+1)/2){ return 0; } return array[mid]; } public int partition(int [] array,int low,int high){ int temp = array[low]; while(low<high){ while(low<high && array[high]>=temp){ high--; } array[low] = array[high]; while(low<high && array[low]<=temp){ low++; } array[high] = array[low]; } array[low] = temp; return low; } }
相关文章推荐
- (剑指Offer)面试题29:数组中出现次数超过一半的数字
- 《剑指Offer》学习笔记--面试题29:数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字||剑指offer
- 剑指offer系列源码-数组中出现次数超过一半的数字
- 剑指offer第二十八题【数组中出现次数超过一半的数字】c++实现
- 剑指offer - 数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- 剑指Offer:数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字-php
- 数组中出现次数超过一半的数字(剑指offer)
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer(30):数组中出现次数超过一半的数字
- 剑指offer-面试题29-数组中出现次数超过一半的数字
- 剑指offer面试题 求数组中出现次数超过一半的数字
- 《剑指offer》——数组中出现次数超过一半的数字
- 剑指offer——面试题29:数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- 剑指Offer面试题29(java版):数组中出现次数超过一半的数字