来源:力扣
题目描述:
给你一个整数数组 nums
,返回出现最频繁的偶数元素。
如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1
。
由于数组中元素的大小范围为 0~1e5,可以用哈希的思路,新声明一个数组,用于记录对应偶数数字出现的次数。同时记录一个最大出现次数和对应数值,每次更新当前偶数出现次数时比较一下是否这个数字出现次数最多。
int mostFrequentEven(int* nums, int numsSize){
if(numsSize==0)return -1;
int f=0,maxn=0,n=-1;//f标记是否出现偶数,n代表出现次数最多的偶数,maxn代表当前最多出现次数
int times[100010]={0};//哈希数组
for(int i=0;i<numsSize;++i)
{
if(!(nums[i]&1))//如果是偶数
{
f=1,times[nums[i]]++;//出现次数+1
if(times[nums[i]]>maxn)maxn=times[nums[i]],n=nums[i];
else if(times[nums[i]]==maxn)//注意要求出现次数相等时偶数尽可能小
if(nums[i]<n)n=nums[i];
}
}
if(!f)return -1;
return n;
}