题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
分析
采用网上大家建议的方法,也就是使用计数器+储存值的方法,一旦计数器为0,那就把储存值变成现在的数字,这个方法只能解决这个序列一定有该数字存在的情况下的结果,如果这个数字不存在,这个算法就不能得出正确的结果,所以还需要再重新遍历一次数组,看这个最后的储存值是不是出现了一半以上。
代码实现
int MoreThanHalfNum_Solution (vector<int> numbers) {
int value = 0;
int count = 0;
for(int i =0;i<numbers.size();i++ ){
if(count == 0){
value = numbers[i];
count++;
}
else if(value == numbers[i]){
count++;
}
else {
count--;
}
}
int times=0;
for(int i =0;i<numbers.size();i++ ){
if(value==numbers[i]){
times++;
}
}
if(times>numbers.size()/2)
return value;
else
return 0;
}