题目:

第二章 线性表 第二节习题12

第二章 线性表 第二节习题12 (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)

相关文章: