考研数据结构

求整数序列的主元素

2018-12-04  本文已影响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;
    }
上一篇下一篇

猜你喜欢

热点阅读