[编程之美]寻找水王

View Code
 1 //有n个数表示ID,其中有一个ID出现的次数超过总数n的一半,求出这是哪个ID
2
3 //Solution1:对n个数进行排序,然后再扫描一遍排好序的ID列表,统计各个ID出现的次数,如果某个ID出现的次数超过总数n的一半,那么就输出这个ID
4
5 //Solution2:对n个数进行排序,则这个有序列表中的第n/2项一定会是要找的ID
6
7 //Solution3:每次删除两个不同的ID,那么在剩下的ID列表中,要找的ID出现的次数仍然超过总数的一半
8 Type Find(Type* ID,int n)
9 {
10 int i,count;
11 count=0;
12 Type candidate;
13 for(i=0;i<n;++i)
14 {
15 if(count==0)
16 {
17 candidate=ID[i];
18 count++;
19 }
20 else
21 {
22 if(candidate==ID[i])
23 count++;
24 else
25 count--;
26 }
27 }
28 return candidate;
29 }

 

posted @ 2012-03-26 13:58  Cavia  阅读(164)  评论(0编辑  收藏  举报