Problem
Notes
思路一:用c++中的map来做,用map<int,int>记录数字对应的出现次数。
思路二:摩尔投票算法,可以在时间o(n),空间o(1)的开销下找出一个数组中的众数。
Codes
思路一:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int target=nums.size()/2+1;
map<int,int> m;
int len=nums.size();
for(int i=0;i<len;++i)
{
m[nums[i]]++;
if(m[nums[i]]==target)
{
return nums[i];
}
}
return -1;
}
};
思路二,摩尔投票算法:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int p=nums[0],count=1;
int len=nums.size();
for(int i=1;i<len;++i)
{
if(count==0)
{
p=nums[i];
count=1;
}
else if(p==nums[i])
{
count++;
}
else
{
count--;
}
}
return p;
}
};