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;
}