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

//思路:
//Boyer-Moore Majority Vote Algorithm (摩尔投票算法)

//  在线性时间 O(n) 和空间复杂度的情况下,在一个元素序列中查找最多的元素。
//  算法在局部变量中定义一个序列元素(m)和一个计数器(cnt),初始化的情况下计数器为0。
//  依次扫描序列中的元素,当处理元素 x 的时候:
//  如果计数器为 0,那么将 x 赋值给 m,然后将计数器(cnt) 设置为1;
//  如果计数器不为 0,那么将序列元素 m 和 x 比较,如果相等,那么计数器加 1,
//  如果不等,那么计数器减 1。
//  处理之后,最后存储的序列元素(m),就是这个序列中最多的元素。

public int MoreThanHalfNum_Solution(int [] array) {
    int cnt=0;
    int majority = array[0];
    for(int num : array){
        if(cnt==0){
            majority = num;
            cnt=1;
        }else if(majority==num){
            cnt++;
        }else{
            cnt--;
        }
    }
    cnt=0;
    for(int num:array){
        if(num==majority){
            cnt++;
        }
    }
    return (cnt>array.length/2)?majority:0;
}

https://www.mianshi.onlinehttps://www.i9code.cn

本文由博客一文多发平台 OpenWrite 发布!

逃跑的眼镜_bvbEK5
7 声望0 粉丝

下一篇 »
替换空格