给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。可以假设数组是非空的,并且给定的数组总是存在众数。
1. 用map记录各个数字出现的次数,最后利用键查询值,超过n/2则返回
int majorityElement(vector<int>& nums) {
unordered_map<int,int> s;
for(auto i:nums){
if(s.count(i)) s[i]++;
else s[i]=1;
}
for(int j =0;j<nums.size();j++){
if(s[nums[j]] > nums.size()/2)
return nums[j];
}
return 0;
}
2. 排序后返回中位数
int majorityElement(vector<int>& nums) {
int len = nums.size();
sort(nums.begin(), nums.end());
return nums[len/2];
}
3. 暴力投票法:众数为1,而其他数令为-1,则所有数之和一定大于0。可利用类似于同归于尽的方式,到最后target一定为众数
int majorityElement(vector<int>& nums) {
int target = nums[0];
int count = 1;
for(int i = 1;i<nums.size();i++)
if(nums[i]!=target) {
count--;
if(count==0) {
target = nums[i];
count = 1;
}
}else count++;
return target;
}