hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一次,贴一下伪代码:
int more_than_half(int a[],int n){
stack<int> st;
for(int i = 1; i < n; i++){
if(st.empty()){
st.push(a[i]);
}else{
if(a[i] != st.top()){
st.pop();
}else{
st.push(a[i]);
}
}
}
return st.top();
}
思想是不同的数相互抵消,最终剩的数就是超过一半的。
按照这种思想,计数的方法来实现:
int more_than_half(int a[],int n){
int count,i;
int res;
for(i = count = 0; i < n; i++){
if(count == 0){
res = a[i];
count = 1;
}else{
if(res == a[i])
count++;
else
count--;
}
}
return res;
}