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

折月煮酒 提交于 2019-12-10 11:14:24

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

题目描述

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

题目解析

题目中要求找到某一个超过数组长度一半的数字,即是需要我们找到一个数字的在数组中出现的次数是在当前数组中出现次数最多的。所以我们可以分以下几步来:
1、记录两个值,一个是数组中一个数字,一是次数,然后遍历数组,如果数组当前位置的值等于这个数字 ,次数加一,否则减一,如果次数等于0时,则将当前值赋值给当前数字,并将次数置为1。最后统计得到的就是在当前数组中出现次数最多的数字。
2、遍历当前数组,统计当前数字在当前数组中出现的次数。
3、判断当前数字出现的次数是不是大于当前数组的长度的一半

代码

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        if(array == null || array.length == 0){
            return 0;
        }
        int count = 1;//某一个数字出现的次数
        int number = array[0];//统计次数的数字
        for(int i = 0 ;i < array.length ; i++){ //找出出现次数最多的数字
           if(count == 0){
              number = array[i] ;
              count = 1;
           }else if( number == array[i] ){
               ++count;
           }else{
               --count;
           }
        }
        count = 0;
        for(int i = 0; i < array.length; i++){//计算当前数字总共出现的次数
            if( array[i] == number){
                count ++;
            }
        }
        if( count > array.length/2){
            return number;
        }else{
            return 0;
        }
        
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!