题目
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
思路:
这道题不能对于每一个数字都算一下数目然后最后得出谁最大然后得出众数,这样做会超出运行时间,所以采用一个map<int, int>来记录每一个数字的频数,当有数字的频数超过阈值的时候立马就返回该数字即可,具体代码如下:
class Solution
{
public:
int majorityElement(vector<int>& nums)
{
int size = nums.size();
map<int, int> counter{};
for (auto x : nums)
{
if (counter.find(x) == counter.end())
{
counter[x] = 1;
}
else
{
counter[x] += 1;
}
if (counter[x] > size/2)
return x;
}
return 0;
}
};