本文主要是介绍【力扣】169.多数元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题的解法是运用哈希表+打擂台的思想
首先题目的意思是存在数字,意思就是最后返回的结果不可能为空就是了,所以便不用考虑{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];}
};
这篇关于【力扣】169.多数元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!