int MoreThanHalfNum_Solution(int* numbers, int numbersLen ) {
// write code here //这个方法参考2013年408考研的代码题的最优解法
int count=0,a=numbers[0]; //a用于记录可能是出现超过一半的数组,出现一次count+1,不是则+1
for(int i=1;i<numbersLen;i++){
if(numbers[i]==a) count++; //如果这个数是可能数a,则count+1
else{
if(count>0) count--; //若这个数不是,则判断count,count>0则表明a还是有可能是的
else{
a=numbers[i]; //否则的话替换掉,因为目标数出现超过一半,所以最终还是会替换回来的
count=1;
}
}
}
return a;
}

京公网安备 11010502036488号