算法思想:给定一个数列,如果一个元素出现的次数大于数列元素总数的一半,则称为多数元素。此算法根据如果一个元素是多数元素则此数列去掉两个不同元素后,该元素仍然为多 数元素。
源代码:
#include <stdio.h>
int candidate(int a[], int n, int m)
{
int j = m;
int c = a[m];
int count = 1;
while((j < n) && count > 0)
{
j ++;
if(a[j] == c)
count ++;
else
count --;
}
if(j == n)
return c;
else
return candidate(a, n, j + 1);
}
void find_many_num()
{
int a[] = {1, 2, 2, 4, 2, 3, 2};
const int len = sizeof(a) / sizeof(a[0]);
int c = candidate(a, len, 0);
int count = 0;
for(int i = 0; i < len; ++ i)
{
if(a[i] == c)
count ++;
}
if(count > (len / 2))
printf("存在多数元素为a:%d", c);
else
printf("不存在多数元素!");
}
int main(int argc, char* argv[])
{
find_many_num();
return 0;
}