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

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

第一种:用HASHMAP 注意数组长度为1的情况

    public int MoreThanHalfNum_Solution(int [] array)
    {   if(array==null||array.length<1)
        return 0;
        if(array.length==1)
            return array[0];
       
       HashMap<Integer,Integer> map= new HashMap<Integer,Integer>();
         
        for(int i=0;i<array.length;i++){
            if(!map.containsKey(array[i]))
                map.put(array[i],1);
            else
            {
                 int count=map.get(array[i])+1;
                if(count>array.length/2)
                    return array[i];
                map.put(array[i],count);
            }
        }
     
        return 0;}

第二种: 如果存在这个数说明它出现的次数比其他所有数字出现次数的和还要多
遍历数组时 记录数字加次数
要找的数字一定是最后一次把次数设为1时对应的数字

 int result=array[0];
     int times=1;
     for(int i=1;i<array.length;i++){
         if(times==0){
             result=array[i];
             times=1;
         }
         else if(result==array[i]){
             times++;
         }
         else
             times--;
     }
     int resTimes=0;
     for(int i=0;i<array.length;i++){
         if(array[i]==result){
             resTimes++;
         }
     }
     if(resTimes*2<=array.length)
         return 0;
     return result;
    }

你可能感兴趣的:(数组-JZ-数组中出现次数超过一半的数字*)