解法一:
先了解数组的长度,再进行排序,代码如下:
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());//先做一个排序
for(int i=0;(i+nums.size()/2)<nums.size();i++)
{
if(nums[i]==nums[i+nums.size()/2])//每次步进一半的元素就可判定nums[i]是否为主要元素
{
return nums[i];
}
}
return -1;
}
};
该算法的时间复杂度为O(nlogn);空间复杂度为O(1)。
解法二:
采用哈希表计数的方法,当>size/2的时候返出,代码如下:
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int>hash;
for(auto x:nums)
{
hash[x]++;
if(hash[x]>nums.size()/2)
return x;
}
return -1;
}
};
该算法的时间复杂度为O(n);空间复杂度为O(n)。