随笔-28  评论-51  文章-10  trackbacks-0
用递归法(尾递归)求最多元素,即找出出现次数大于n/2的元素
基于原理:去掉两个不同的元素,剩下数组里的最多元素仍然是整个数组的最多元素(如果存在的话)

 1 #include <stdio.h>
 2 int majority(int [], int,int );
 3 
 4 int main()
 5 {
 6     int i = 0;
 7     int c = 0;
 8     int data [] = {3,5,5,2,2,2,2};
 9     int maj = majority(data,1 ,7);
10     for( ; i < 7; i++)
11     {
12         if(maj == data[i])
13            c++;
14     }    
15     printf("The majority num of this array is: %d\n", c>3?maj:-1);
16     return 0;
17 }
18 /*s for the begining index, and e for the ending index
19 * * find the cadidate num of majority*/
20 int majority(int data[], int s, int e)//begin s = 1, e = n(including)
21 {
22     int c = 1;// count the candidate majority num
23     int j; //fot the index move on
24     int i = 0;
25     for( j = s; j< e; j++)
26     {
27         if( data[s-1== data[j])
28             c++;
29         else
30         {
31             if(--c==0)
32             break;    
33         }        
34     }    
35     if(c>0)
36         return data[s-1];
37     else
38          majority(data, j+1, e);
39             
40 }


posted on 2008-03-29 23:03 fullfocus 阅读(528) 评论(1)  编辑  收藏 所属分类: 算法

评论:
# re: 求多数元素 2008-09-27 09:53 | 冶人
品读了
Thx!
如果我想实现求多数元素,但时间复杂度为O(n),其它无限制,该如何实现呢?请教!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: