寻找数列中多数元素(递归实现)

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

  

原文地址:https://www.cnblogs.com/ourroad/p/3143393.html