绝对众数

定义:给定N个数,称出现次数最多的数为众数;若某众数出现次数大于N/2,称该众数为绝对众数

如:A={1,2,1,3,2}中,1和2都是众数,但都不是绝对众数。

如:A={1,2,1,3,1}中,1是绝对众数。


算法分析:一个数组中最多出现1个绝对众数,这个众数出现的次数超过整个数组的一半,可以利用打雷的思想,

遍历一遍数据,如果当前值和擂主不相等,则擂主对应的打擂次数减1,如果相等就加1,如果统计擂主的次数为0,当前值直接晋级擂主,直接结束,这样,如果一个值是众数,他必然是最后的擂主,但是是擂主不一定最后是众数,还需要再遍历一遍,统计当前擂主的次数是否过半

public static void main(String[] args) {
    int [] array = new int[13];
    array[0] = 1;
    array[1] = 2;
    array[2] = 1;
    array[3] = 3;
    array[4] = 3;
    array[5] = 3;
    array[6] = 1;
    array[7] = 2;
    array[8] = 2;
    array[9] = 2;
    array[10] = 2;
    array[11] = 2;
    array[12] = 2;
    weightNumber(array);
}



public static void weightNumber(int [] array){
    //临时存放擂主
    int temp = 0;
    int count = 0;
    for(int i = 0; i < array.length; i++){
        if(i == 0 || count == 0){
            temp = array[i];
            count = 1;
        } else{
            if(array[i] == temp){
                count ++;
            }else{
                count --;
            }
        }
    }
    count = 0;
    for(int i : array){
        if(temp == i){
          count ++;
        }
    }
    if(count > array.length/ 2){
        System.out.println("绝对重数为:"+temp);
    }else{
        System.out.println("当前数字中没有绝对重数");
    }
}


猜你喜欢

转载自blog.csdn.net/junglerofchina/article/details/79453691
今日推荐