定义:给定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("当前数字中没有绝对重数"); } }