您的位置:首页 > 其它

已知一个整数序列 A =(a 0 ,a 1 ,..., a n-1 ),找出 A 的主元素

2020-04-05 18:18 357 查看

用时间复杂度O(n)的算法。

思路:序列中删去两个不相等的数,主元素不变。

步骤一:选择第一个元素为候选主元素,使用一个计数器,初始值为1,碰见一个相同值的元素,计数器加1否则减一。若计数器的值已经等于0,则更换为下个元素为候选主元素。最后计数器值的意义是从左到右不停删去两个不相等的数,剩下相同数即候补主元素的个数。

步骤二:判断是否是真正的主元素,统计候补主元素个数

int majority(int A[],int n)
{
int i,c,count=1;
c=A[0];
for(i=1;i<n;++i){
if(A[i]==c)
count++;
else{
if(count>0)
count--;
else{
c=A[i];
count=1;
}
}
}
if(count>0){
for(i=count=0;i<n;++i){
if(A[i]==c);
count++;
}
}
if(count>n/2)
return c;
else
return -1;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
我爱小白~ 发布了7 篇原创文章 · 获赞 0 · 访问量 101 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐