寻找出现次数最多的数据
见编程之美
在一堆数里随便拿一个数,再找一个与它不相等的,然后一起扔掉,这样问题规模不断缩小,最终等到找不到一个不相等的数时,就成功 了。但要简化算法,就不能每拿一个数就统统找一遍。可以考虑准备一个队列,队列里放着暂时扔不掉的数。如从头开始,将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 }