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.
想用map做,但老是提示re。也是第一次用map,不知道错在哪里
class Solution {
public:
int majorityElement(vector<int> &num) {
map<int, int> eleNum;
map<int, int>::iterator itr,max;
int i,len=num.size();
for(i=0;i<len;i++)
{
if(eleNum.empty())
{
eleNum[num[i]]=1;
}
else
{
itr=eleNum.find(num[i]);
if(itr!=eleNum.end())
itr->second++;
else
eleNum[num[i]]=1;
}
}
map<int, int>::iterator begin=eleNum.begin();
map<int, int>::iterator end=eleNum.end();
for(itr=begin;itr!=end;itr++)
{
if(itr->second>=max->second)
max=itr;
}
return max->first;
}
};
刚才找到错误了,在判断max的时候没有对max初始化。。。。
class Solution {
public:
int majorityElement(vector<int> &num) {
map<int, int> eleNum;
map<int, int>::iterator itr,max;
int i,len=num.size();
for(i=0;i<len;i++)
{
if(eleNum.empty())
{
eleNum[num[i]]=1;
}
else
{
itr=eleNum.find(num[i]);
if(itr!=eleNum.end())
itr->second++;
else
eleNum[num[i]]=1;
}
}
map<int, int>::iterator begin=eleNum.begin();
map<int, int>::iterator end=eleNum.end();
max=begin;
for(itr=begin;itr!=end;itr++)
{
if(itr->second>=max->second)
max=itr;
}
return max->first;
}
};
别人的代码,简洁的想哭……不过这也是因为多数元素出现的次数大于n/2的缘故。原文地址:点击打开链接
class Solution {
public:
int majorityElement(vector<int> &num) {
int n = num.size();
sort(num.begin(),num.end());
return num[n/2];
}
};
另外两个思路,原文地址 点击打开链接