//这是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;  //若该数出现次数不大于一半,则数组中不存在主元素
    }
};