思路
无法理解标准答案的候选元素,因此选择自己的方法:对数组进行循环,每次循环以删除首元素及与首元素相等的整数,边删除边计数,判断数量是否大于n/2。删除完的数组继续第二次循环,直到数组里的元素都删完。
代码
void findmain(int A[],int n,int &main){
int i=0,p,q,first,count;
while(A[i]){
first=A[i];
for(p=-1,q=0;A[q];q++){
if(A[q]!=first){
A[++p]=A[q];
}else{
count++;
}
}
if(count>n/2){
main=first;
break;
}
}
}
分析
时间复杂度最好情况是数组内的元素全部相同,即O(n);最坏情况是元素全部不同,即O(n(n+1)/2)
综上:时间复杂度为O(n^2)
空间复杂度为O(1)