Given an array of size n, find the majority element. The majority element is the element that appears more than ?
n/2 ?
times.
You may assume that the array is non-empty and the majority element always exist in the array.
#include<iostream> #include<vector> #include<algorithm> #include<map> using namespace std; //先排序 int majorityElement(vector<int> &num) { sort(num.begin(),num.end()); int mid = num.size()/2; return num[mid]; } //利用关联容器 int majorityElement(vector<int> &num) { if(num.size()==1) return num[0]; map<int,int> Mapcount; for (int i =0;i!=num.size();++i) { if (Mapcount.count(num[i])) { ++Mapcount[num[i]]; if (Mapcount[num[i]]>num.size()/2) return num[i]; } else Mapcount.insert(make_pair(num[i],1)); } } //将重复点与非重复点成对计算 int majorityElement(vector<int> &num) { int nTimes = 0; int candidate = 0; for(int i = 0; i < num.size(); i ++){ if(nTimes == 0){ candidate = num[i]; nTimes = 1; } else{ if(candidate == num[i]) nTimes ++; else nTimes --; } } return candidate; }
原文:http://blog.csdn.net/li_chihang/article/details/44618033