一、问题描述
给定一个大小为 n
的数组 nums
,返回其中的多数元素。
多数元素是指在数组中出现次数大于⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素
题目链接:多数元素
二、题目要求
样例 1
输入: nums = [3,2,3]
输出: 3
样例 2
输入: nums = [2,2,1,1,1,2,2]
输出: 2
考察
1.哈希表、简单模拟
2.建议用时10~25min
三、问题分析
这也是一道比较简单的模拟问题,只不过要用到哈希表的相关知识点,对于考察考察哈希表计数的题目,之前我写过一篇三种哈希方法解决元素重复问题的文章,大家可以先去看看下面这一篇文章:
我们先分析一下题目,首先题目要求我们求出元素出现频率>n/2
的元素。
对于这一题,次数要求大于数组一半的长度(不为空),那么可以就可以确定元素的唯一性
,只要我们找到这个数字,就不需要向下遍历了,直接输出结果就行。
对于数字出现的次数问题,我们先遍历数组元素,通过哈希表map计数,每次计数后判断一下:次数是否达到要求
凭借这波分析,问题基本拿捏!
四、编码实现
class Solution {
public:
int majorityElement(vector<int>& nums) {
int i,n=nums.size();//初始化
map<int,int>m;//map计数
for(i=0;i<n;i++)//循环判断
{
m[nums[i]]++;//计数
if(m[nums[i]]>n/2)//满足条件
return nums[i];
}
return 0;
}
};