经典面试题程序员

经典面试题16 - 数组中出现次数超过一半的数字

2017-03-12  本文已影响120人  豆志昂扬

问题
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

例如: 输入一个长度为7的数组,

{1,2,2,2,5,4,2}

由于数字2在数组中出现了4次,超过数组长度的一半,因此输出2。如果不存在则输出0。

解答

首先说这是一道很经典的面试题,很多互联网公司都曾经采用过这个题目。

下面是对该题的分析思路:

//Java源码
public int MoreThanHalfNum_Solution(int [] numbers) {
        int maxNum = 0;
        if(numbers.length==0)
            return maxNum;
        maxNum = numbers[0];
        int numCount = 1;
        for(int i=1;i<numbers.length-1;i++){
            if(numbers[i] == maxNum){
                numCount++;
            }else{
                numCount--;
                if(numCount == 0){
                    numCount = 1;
                    maxNum = numbers[i];
                }
            }
        }
        int total = 0;  
        for (int i = 0; i < numbers.length; i++) {  
            if (numbers[i] == maxNum) total++;  
        }  
        if (total * 2 <= numbers.length) {  
            return 0;
        }  
        else return maxNum ;
    }

上述源码可以在 这里 调试

推荐阅读

经典面试100题 - 持续更新中

上一篇下一篇

猜你喜欢

热点阅读