题目描述:王道P19 Q12
主元素:一个数组中某个元素个数为k个,数组长度为n,如果k>n/2,那这个数就是主元素。
思想:
先把整个数组按递增排序,主元素一定在中间位置,找出n/2位置的那个数,如果那个数是主元素,那么就是,否则就不是。
代码:
int getMajority(int A[],int n){
bubbleSort(A,n);
int median=A[n/2];
int count=0;//记录中位数个数
for(int i=0;i<n;i++){
if(A[i]==median)
count++;
}
if(count>n/2)
return median;//中位数就是主元素
else
return -1;
}
void bubbleSort(int A[],int n){
int flag;
for(int i=n-1;i>=1;i--){
flag=0;
for(int j=1;j<=i;j++){
if(A[j-1]>A[j]){
swap(A[j-1],A[j]);
flag=1;
}
}
if(flag==0)
return;
}
}
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...
#define MAXSIZE 100
//用于使用c++的输出语句
#include<iostream>
using namespace std;
int getMajority(int A[],int n);
void bubbleSort(int A[],int n);
void swap(int &a,int &b);
void mai

该博客探讨了如何在顺序表中找到主元素的问题。主元素是指在一个数组中出现次数超过数组长度一半的元素。解决方案是先对数组进行升序排序,然后检查中间位置的数字是否满足主元素条件。如果该数字的出现次数大于n/2,那么它就是主元素。
最低0.47元/天 解锁文章
215

被折叠的 条评论
为什么被折叠?



