- 遍历,添加一个length/2+1的数组,记录每个数组出现的次数,然后遍历该频率数组,最大的数字就是
- 出现了半数以上的话,为什么不两两约去,剩下的那个不就是结果了嘛。当然还要考虑一件事,要是1,1,2,1,哪结果不就是2了嘛?所以当前后两个数字一样的时候就不能直接约去了,复杂度o(n)
看代码:
public class Test {
int fun(){
int array[]={4,1,4,1,4,1,4};
int result=array[0],count=0;
for(int i=0;i<array.length;i++){
if(count==0){
result=array[i];
count=1;
}else if(array[i]==result){
count++;
}else if(result!=array[i]){
count--;
}
}
return result;
}
static public void main(String []args){
fun();
}
}
没有多高深的知识点,但就是为这种泛光的思想惊叹~~