可以使用map做,由于不熟练,还错了好久,最后自己写了一个很慢很慢的算法
class Solution {
public:
int majorityElement(vector<int>& nums) {
map<int,int> mymap;
int len=nums.size();
for(int i=0;i<len;i++){
mymap[nums[i]]=0;
}
for(int i=0;i<len;i++){
if(mymap.count(nums[i])){
mymap[nums[i]]++;
if(mymap[nums[i]]>(len/2))
return nums[i];
}
}
}
};
此方法时间复杂度太高,只击败了百分之几的人。
后来发现如果用map的迭代器和find函数可以击败百分之四十的人群。
class Solution {
public:
int majorityElement(vector<int> &num)
{
map<int, int>count;
for (vector<int>::iterator i = num.begin(); i != num.end();i++)
{
if ( (++count[*i]) > num.size() / 2)
return *i;
}
}
};
这个算法大概是目前最快的
class Solution {
public:
int majorityElement(vector<int> &nums)
{
int cnt=0;
int now;
for(int i=0;i<nums.size();++i){
if(cnt==0){
now=nums[i];
cnt++;
}
else{
if(now==nums[i]) cnt++;
else cnt--;
}
}
return now;
}
};