目录
题目链接:
2404. 出现最频繁的偶数元素 - 力扣(LeetCode)
题目描述:
给你一个整数数组 nums
,返回出现最频繁的偶数元素。
如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1
。
第一眼想法:
C语言暴力法:
1.用一个长为100001的hash数组来记录nums数组中元素出现的次数。
因为题目限制nums数组中的数值不超过100000;
2.用min来记录 最小的偶数元素,用count来记录 此前元素出现最多的次数。
代码如下:
int mostFrequentEven(int* nums, int numsSize){
int hash[100001]={0};
int min = INT_MAX;
int count = 0;
for (int i = 0; i < numsSize; i++) {
hash[nums[i]]++;
if (nums[i]%2 == 0) {
if (hash[nums[i]] > count) { //大于此前最大次数
count = hash[nums[i]];
min = nums[i];
}
else if (hash[nums[i]] == count) { //等于此前最大次数
min = min < nums[i] ? min : nums[i];
}
}
}
return min == INT_MAX ? -1 : min;
}
c++哈希表法:
用哈希表来计数。
class Solution {
public:
int mostFrequentEven(vector<int>& nums) {
unordered_map<int, int> count;
for (auto x : nums) {
if (x % 2 == 0) {
count[x]++;
}
}
int res = -1, ct = 0;
for (auto &p : count) {
if (res == -1 || p.second > ct || p.second == ct && res > p.first) {
res = p.first;
ct = p.second;
}
}
return res;
}
};
自己对哈希表还是不怎么熟悉。