题目描述:给你一个数组,若这个数组存在一个数的个数超过数组的一半,则将其输出,若不存在则输出0
思路:摩尔投票法
摩尔投票法,只需要一次循环就可以判断这个数组是不是 不存在那个数
具体操作:一个计数器count,一个存储当前可能是那个数的变量majority,从第一个数出发,赋给majority,count++,遍历数组,如果数与majority不一样,那么就count--,若相同则count++,若count=0了,则重新定majority。
这样子做完一次循环后,如果count=0,则说明这个数组一定没有那个数,count!=0,不能保证它有那个数,且是majority
所以需要再遍历一次,然后判断majority这个数是否超过一半了,超过了就返回它
java程序:
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int count = 0;
int majority = 0;
for(int num : array){
if(count==0){
majority = num;
count++;
}else{
if(num == majority)
count++;
else
count--;
}
}
int res =0;
if(count!=0)
for(int i =0;i<array.length;i++){
if(majority == array[i])
res++;
}
if(res>array.length/2)
return majority;
return 0;
}
}