寻找出现次数最多的数据

见编程之美

在一堆数里随便拿一个数,再找一个与它不相等的,然后一起扔掉,这样问题规模不断缩小,最终等到找不到一个不相等的数时,就成功 了。但要简化算法,就不能每拿一个数就统统找一遍。可以考虑准备一个队列,队列里放着暂时扔不掉的数。如从头开始,将a[0]放入队列,再看a[1],如 果a[0] != a[1],则扔掉a[1]和a[0],a[0]从队列取出;如果a[0] == a[1],则a[1]入队列,然后a[2]进行相同的操作,以此类推。

 

 1 int FindMaxcountNum(const int* pArr, const size_t size) 
 2 {
 3     int nValue;
 4     int count = 0;
 5     for(size_t i = 0; i < size; i++) 
 6     {
 7         if (count == 0) 
 8         {
 9             nValue = pArr[i];
10             count = 1;
11         }
12         else 
13         {
14             nValue == pArr[i] ? count++ : count--;
15         }
16     }
17     return nValue;
18 }

 

 

 

posted on 2012-05-31 15:50  梦想Sky  阅读(650)  评论(0编辑  收藏  举报

导航