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;
}
本文提供了三种不同的算法来解决寻找数组中多数元素的问题:通过排序、使用关联容器和Boyer-Moore投票算法。多数元素是指在大小为n的数组中出现次数超过n/2的元素。
1220

被折叠的 条评论
为什么被折叠?



