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


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

      

  • 相关阅读:
    程序中图片透明 函数(使用SetBkColor API函数)
    编程中使用锁
    event内存泄漏
    diskcache
    linux内核管理
    Vue
    Paxos算法
    索引以及页和区
    CoreRT
    二叉树
  • 原文地址:https://www.cnblogs.com/ourroad/p/3143393.html
Copyright © 2020-2023  润新知