定义:序列中的多数元素是指在一个元素个数为n的序列中,多数元素出现次数大于[n/2].
这题解题思路有很多,可以暴力破解,时间复杂度为O(n2);也可以先排序再加以判断,时间复杂度为O(nlogn);下面的解法时间复杂度为O(n),值得看一下。
算法思路:在原序列中去除两个不同的元素后,原序列中的多数元素在新序列中还是多数元素。
//多数元素(一个数组中一个元素出现的次数超过数组长度的一半)
#include <stdio.h>
#define M 10
int search(int *num,int address);
int judge(int *num);
int main(void)
{
int num[M]={1,2,1,1,5,2,1,1,3,1};
int tmp = judge(num);
if(tmp>-9999999) printf("%d",tmp);
else printf("None");
return 0;
}
int judge(int *num)
{
//对返回的值进行判断,是否数量大于n/2。因为如果num数组中不存在多数元素,search也会返回一个值
int tmp = search(num,0),i=0,count=0;
for(i=0;i<M;i++)
{
if(tmp==num[i]) count++;
}
if(count>=M/2) return tmp;
else return -9999999;
}
int search(int *num,int address)
{
int j = address,tmp = num[address],count=1;
//递归函数从第一个元素开始,成对去除不同的元素
while(j<M-1&&count>0)
{
++j;
if(tmp==num[j]) count++;
else count--;
}
if(j==M-1) return tmp;
else return search(num,j+1);
}