力扣——2404、出现最频繁的偶数元素
2404. 出现最频繁的偶数元素
给你一个整数数组 nums ,返回出现最频繁的偶数元素。
如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1 。
示例 1:
输入:nums = [0,1,2,2,4,4,1]
输出:2
解释:
数组中的偶数元素为 0、2 和 4 ,在这些元素中,2 和 4 出现次数最多。
返回最小的那个,即返回 2 。
示例 2:
输入:nums = [4,4,4,9,2,4]
输出:4
解释:4 是出现最频繁的偶数元素。
示例 3:
输入:nums = [29,47,21,41,13,37,25,7]
输出:-1
解释:不存在偶数元素。
提示:
1 <= nums.length <= 20000 <= nums[i] <= 105
问题解析
我们可以用一个哈希表来记录所有元素的出现次数,同时用一个变量mn记录答案(初始可以给mn设置一个很大的数或者设置一个奇数)。
遍历数组,如果当前数是偶数(判断是否为偶数,可以用当前数%2,判断结果,如果是0则说明是偶数,反之不是),则在哈希表里记录的出现次数+1,如果当前偶数的出现次数大于mn的出现次数,就把mn更换为当前偶数。
特别的,因为我们要的答案满足的条件有三个:
- 是偶数
- 出现次数最多
- 最小
所以如果当前偶数的出现次数是等于mn的出现次数,且当前偶数要比mn更小的话,我们也用当前偶数替换掉mn。
最后如果mn是我们一开始设置的初始值,说明数组没有偶数,返回-1;反之直接返回mn。
AC代码
class Solution {
public:
int mostFrequentEven(vector<int>& nums) {
int mn=10001,n=nums.size();
unordered_map<int,int>mymap;
for(int i=0;i<n;i++)
{
if(nums[i]%2==0)
{
mymap[nums[i]]++;
if(mymap[nums[i]]>mymap[mn])
{
mn=nums[i];
}
else if(mymap[nums[i]]==mymap[mn])
{
mn=min(mn,nums[i]);
}
}
}
return mn==10001?-1:mn;
}
};