这道题的解法是运用哈希表+打擂台的思想
首先题目的意思是存在数字,意思就是最后返回的结果不可能为空就是了,所以便不用考虑{1,2,3,4,5}这种例子。那么就可以用哈希表存所出现数字出现的次数,然后如果不用打擂台的思想,其实还要再遍历一遍哈希表,这样时间复杂度就够够的了。
这个打擂台的思想就是人多者取胜,最后留下来的就是王,关于这里的解释大家可以看一下这个博主写的。
【数组相关】169. 多数元素_169. 多数元素python3-CSDN博客
需要注意的是这里不存在谁比谁强的问题,所以请不要较真哦~
代码如下:
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int>counts;
int majority=0,cnt=0;
for(int num:nums){
counts[num]++;
if(counts[num]>cnt){
majority=num;
cnt=counts[num];
}
}
return majority;
}
};
然后还有一种解法就是排序,这个更简单了,已知存在,那么我们就将这个数字进行一个排序,然后折中取即可。(数组是从0开始排序的)
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};