首页 > 代码库 > 数组中出现次数超过一半的数字

数组中出现次数超过一半的数字

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
 
解析:方法一:这道题最low的解法是,用一个hashmap存起来,最后检查
 
如果存在数量大于一半的数,那么依次选出两个不一样的删掉,最后剩下的数字肯定为那个大于一半的数字。
方法二:从前向后遍历,每次遇到不是0的数字,就找他后面一个不是0的且与他不相等的数字,同时设置为0。最后找到一个不为0的,遍历一遍看这个数字出现的次数是不是大于一半,如果是就返回,不是就返回0
 
方法三  把第一个数字作为参考 count为1,从他往后找,找到一个和他不一致的count-1,count为0时 则跳到下一个作参考,若一致则标志位count++,继续重复运行,最后的参考就是可能是的那个数字,再遍历一遍看 总数是否大于一半
 
方法三十分巧妙,代码如下:
public class Solution {    public int MoreThanHalfNum_Solution(int [] array) {        int length=array.length;        if(array==null||length<=0){            return 0;        }                int result=array[0];        int times=1;        for(int i=1;i<length;i++){            if(times==0){                result=array[i];                times=1;            }else{                if(array[i]==result){                    times++;                }else{                    times--;                }            }        }                times=0;        for(int i=0;i<length;i++){            if(result==array[i]){                times++;            }       }                   if(times*2<length){           result=0;       }       return result;    }}

 

数组中出现次数超过一半的数字