超过一半的数字
题:数组中有一个数字出现的次数超过了这个数组长度的一半,找出这个数字
//不同的数进行消除
public static int solve(int[] arr) {
//候选数
int candidate = arr[0];
//出现的次数
int nTimes = 1;
for(int i=1; i<arr.length; i++) {
//两两消除减为0,应该把现在的元素作为候选值
if(nTimes == 0) {
candidate = arr[i];
nTimes = 1;
continue;
}
//遇到与候选值相同的,次数加1
if(arr[i] == candidate)
nTimes++;
else
nTimes--;
}
return candidate;
}