publicintmoreThanHalfNum(int[] array){if(array ==null|| array.length ==0){return0;}int flag =0;Map<Integer,Integer> map =newHashMap<Integer,Integer>();int len = array.length;for(int i =0; i < len; i++){if(map.containsKey(array[i])){
map.put(array[i], map.get(array[i])+1);}else{
map.put(array[i],1);}if(map.get(array[i])> len /2){
flag = array[i];break;}}return flag;}
解法2
设置标识变量,遇到相同的数字,就把次数加1,如果没有遇到就把次数减1
由于要找的数字出现的次数一定大于其他数字出现次数之和
所以那个数字肯定是最后一次吧times变量设为1对应的数字
代码实现
publicintmoreThanHalfNum(int[] array){if(array ==null|| array.length ==0){return0;}int times =1;int result = array[0];for(int i =1; i < array.length; i++){if(times ==0){
result = array[i];
times =1;}elseif(array[i]== result){//遇到相同的数字次数就加1
times++;}else{//没有遇到相同的就把次数减1
times--;}}if(!checkMoreThanHalfNum(array, result)){return0;}return result;}//检查该数字是否出现的次数超过一半privatebooleancheckMoreThanHalfNum(int[] array,int result){int times =0;for(int i =0; i < array.length; i++){if(array[i]== result){
times++;}}boolean isMoreThanHalf =true;if(times *2<= array.length){
isMoreThanHalf =false;}return isMoreThanHalf;}<p></p>