可以升序排序如果存在这个数,那么这个数一定在排序后的中间位置,且前面的数都是这个数字;但是这个用到了排序,最快时间复杂度也是nlog2n
思路:守阵地,遇到队友队伍加1,遇到敌人,同归于尽一个😏,就是这么猛
首先用一个数字survivor来保存幸存者方,用一个数字count来计算幸运者幸运值 规则:如果遇到相同数字代表相同阵营,surCount++; 如果遇到不同数字,则同阵营幸存者surCount--; 如果count=0,则同阵营幸存者被取代.
public int MoreThanHalfNum_Solution(int [] array) {
if (array.length==1){
return array[0];
}
int survivor = array[0];
int surCount=1;
for (int i = 0; i < array.length; i++) {
if (surCount==0){
survivor=array[i];
surCount++;
}else if (survivor!=array[i]) {
surCount--;
}else if (survivor==array[i]){
surCount++;
}
}
int count=0;
for(int i=0;i<array.length;i++){
if (array[i]==survivor){
count++;
}
}
if (count>array.length/2){
return survivor;
}else {
return 0;
}
}