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.
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
求一个出现次数超过n/2的数字,那么这种情况下势必只会有一个数字的次数满足这种情况。
思路一:可以利用哈希表直接记录查找,若是次数超过n/2,直接返回数字
class Solution {
public:
int majorityElement(vector<int>& nums) {
int temp=nums.size()/2+1;
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++){
m[nums[i]]++;
if(m[nums[i]]>=temp)
return nums[i];
}
}
};
思路二:可以说是非常机智的一种方法,先对数组进行排序,出现次数超过n/2,那么无论是最小的还是最大的,最中间数字始终是在n/2的范围内
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};