题目:
(1)算法思想
1.将第一个数c存到一个变量之中,并在A中遍历
2.如果c=A[I]的话,计数加1,如果不等的话,计数减一,当计数为0时,c则替换为下一个整数
3.将遍历之后留下来的整数,在序列中再次进行遍历,重新检查是否满足主元素的条件
(2)具体算法描述
int find(int A[i],int n)
{
int c=A[0],cnt=1;
for(int i=1;i<n;i++)
{
if(cnt==0)
{
c=A[i];cnt=1;continue;
}
if(c==A[i])
cnt++;
else
cnt--;
}
cnt=0;
for(int i=0;i<n;i++)
{
if(c==A[i])
cnt++;
}
if(cnt>n/2)
return c;
else
return -1;
}
(3)时间,空间复杂度分析
时间复杂度为o(n),空间复杂度为o(1)