package demo;
public class P40 {
//乱序数组,有一个数字个数超过数组的一半,求该数字
//思路:不同数字抵消次数的最后结果,或者分区找第(length/2)小的数字
//变种:出现次数为总数一半
//思路:分为目标是最后一个/不是的情况,对最后一个数出现次数计数。
// 如果抵消完计数==一半则就是最后一个,否则不是最后,那么就是最后次数为0的candidate
public static void main(String[] args) {
int[] arr= {1,3,3,6,3,3,5};
System.out.println(moreThanHalf(arr));
}
static int moreThanHalf(int[] arr) {
int candidate=arr[0];
int times=1;
for(int i=1;i<arr.length;i++) {
if(times==0) {
candidate=arr[i];
times=1;
}
if(candidate==arr[i]) {
times++;
}
else {
times--;
}
}
return candidate;
}
}