美文网首页考研数据结构
求整数序列的主元素

求整数序列的主元素

作者: 飞白非白 | 来源:发表于2018-12-04 23:29 被阅读7次
    // 已知一个整数序列A=(a0,a1,…,an-1),其中0≤ai<n(0≤i<n)。
    // 若存在ap1=ap2=…=apm=x且m>n/2(0≤pk<n,1≤k≤m),则称x为A的主元素。
    // 例如A=(0,5,5,3,5,7,5,5),则5为主元素;又如
    // A=(0,5,5,3,5,1,5,7),则A中没有主元素。
    // 假设A中的n个元素保存在一个一维数组中,请设计一个尽可
    // 能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输出-1。
    
    // 思路:
    // 对一个乱序序列,遍历这个序列,m记录遍历到的值,count记
    // 录该值出现的次数。如果A[i]与m相等,则count++,否则count–;
    // count减为0时,则令m=A[i],count=1,;直至遍历结束。
    // 再遍历一次,统计m出现的次数,若大于len/2,如返回m,否则返回-1.
    
     int FindMajor2(int s[],int len){
            int m = s[0],count=0;
            for(int i=0;i<len;i++){
                if(s[i]==m){
                    count++;
                }else{
                    if(count>0) count--;
                    else{
                        m = s[i];
                        count = 1;
                    }
                }
            }
            count=0;
            for(int i=0;i<len;i++){
                if(s[i]==m){
                    count++;
                }
            }
            if(count>len/2)return m;
            else return -1;
        }
    

    相关文章

      网友评论

        本文标题:求整数序列的主元素

        本文链接:https://www.haomeiwen.com/subject/fbybcqtx.html