标签:
问题描述:
//2016/5/17 #include<iostream> void main() { int i = 0; int count = 0; //用于记录数组前N个数中的元素两两不同则消除的剩余数 int ID; //用于记录ID int arry[] = { 1, 2, 3, 1, 4, 1, 1, 1, 8, 1 ,6 ,1 }; //帖子列表,下标是帖子ID,内容是发帖人ID for (; i < sizeof(arry)/sizeof(arry[0]); i++) { if (count == 0) //如果count减为0,代表前i-1个ID两两消除,更新ID和count { ID = arry[i]; count = 1; } else //否则继续与下个元素进行两两消除或者增加相同元素个数 { if (ID == arry[i]) //增加相同元素的个数 { count++; } else //消除 { count--; } } } //输出水王ID std::cout << "水王的ID是 " << ID << std::endl; }
实现截图:
arry[] = { 1, 2, 3, 1, 4, 1, 1, 1, 8, 1 ,6 ,1 };
arry[] = { 2, 5, 6, 6, 5, 5, 5 };
个人总结:
这个问题有很多解法,最简单的就是对数组中的每一个元素的出现次数进行计数,最后再找到出现次数最多的那个元素,但是这种方法是要以牺牲时间和空间作为代价的,其实如果能找出问题所潜藏的一面,加以利用方法往往可以简单很多,就比如本例。然而,这也正是困难所在。
标签:
原文地址:http://www.cnblogs.com/qwer112/p/5502073.html