题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
出现次数大于一半的数最多只会有一个,或者不存在这样的数。找出这个数的方法为:一次在数组中删掉2个不同的数,不停的删除,直到只剩下一种数,如果一个数出现的次数大于一半,那么这个数一定会被剩下来。
如果没有这样的数,则会剩下一个随机数,需要判断剩下的这个数出现的次数有没有超过一半。
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int times = 0;
int cand = 0;
for(int i = 0;i < array.length;i++){
if(times == 0){
cand = array[i];
times = 1;
}else if(cand == array[i]) times++;
else times--;
}
times = 0;
for(int i = 0;i < array.length;i++){
if(cand == array[i]) times++;
}
if(times > array.length/2) return cand;
else return 0;
}
}