#算法# 递归法找多元素

来源:互联网 发布:淘宝买岛国资源搜什么 编辑:程序博客网 时间:2024/05/21 15:06

找寻一组数中出现次数最多的数

  • 定义:数组a[n],整数x在数组a中出现的次数>(n/2),x即为多元素。
  • 算法思路:1.次数大于n/2,每次去掉2个数仍可满足。2.有选择性的统计出现次数

寻找出现次数大于n/2的数

三大要素:数组、查找位置、n

1.参数:Count    //重复+1,不重复-1       Data[n]  //数据存储的地方       locate   //寻数位置2.思路:       //初始化       Count =1;       temp =Data[1];       //执行       从Data[2]开始向后扫描,for i=2 to n       if(Data[i]==temp) Count++;       if(Data[i]!=temp) Count--;       if(Count==0),对Data[i+1..n]再次寻找出现次数大于剩下数的一半的数 3.算法uint32_t Candidate(uint32_t *Data, int locate, int n){    uint32_t temp = Data[locate];    int i,count = 1;    for(i = locate+1;i < n && count >0; i++){        if(Data[i] == temp)             count++;        else            count--;    }    if(i == n)        return temp;    else         return Candidate(Data, i+1, n);}

在这个算法中有一个重要的隐含的意思,由于找寻的是超过一半的数,那么在count记为0时,拿掉之前的数,剩下的数据中超过一半的数即是整体数中超过一半的数。

判断寻找到的数是否符合要求

int Majority(uint32_t *Data, int n){    uint32_t temp= Candidate(Data, 1, n);    int i,count;    for(i=1; i<=n; i++){        if(Data[i] == temp)            count++;        if(count > n/2)            return temp;        else            return -1;    }}
原创粉丝点击