算法思想:给定一个数列,如果一个元素出现的次数大于数列元素总数的一半,则称为多数元素。此算法根据如果一个元素是多数元素则此数列去掉两个不同元素后,该元素仍然为多 数元素。
源代码:
#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; }