//这是2013年408真题中的求主元素。 class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { int main = numbers[0]; //先设主元素为数组第一个元素 int cnt = 1; //而且计数为1 int i = 0; for(i = 1; i < numbers.size(); i++) { if(numbers[i] == main) //依次访问,如果与当前主元素相同 cnt++; //则计数加1 else{ if(cnt > 0) //如果不是该主元素,且计数仍旧大于0 cnt--; //则计数减1 else{ //如果不是主元素,且计数小于等于0 main = numbers[i]; //就切换主元素,设当前访问元素为主元素 cnt = 1; //重新计数为1,开始下一趟循环 } } } if(cnt > 0) //全部访问完后再验证最后剩下的元素是否真为主元素 for( i =0, cnt =0; i < numbers.size(); i++) if(numbers[i] == main) cnt++; //统计该元素出现次数 if(cnt > numbers.size() / 2) //次数超过一半则为主元素 return main; else return 0; //若该数出现次数不大于一半,则数组中不存在主元素 } };