Every day a Leetcode
题目来源:2404. 出现最频繁的偶数元素
解法1:哈希
我们构建一个这样的哈希表 unordered_map<int, int> umap:
- key:偶数数组元素 nums[i]
- value:nums[i]的出现次数 count
我们遍历一次数组 nums 就能构建出这个哈希表。
若哈希表为空,返回 -1。
变量 maxCount 记录最高出现次数,变量 minNum 记录满足最高出现次数的最小数组元素,均初始化为 0。
设 it 为指向 umap 的迭代器。
我们遍历哈希表:
- 若 it->second > maxCount,更新 maxCount = it->second,minNum = it->first;
- 若 it->second == maxCount,更新 minNum = min(minNum, it->first);
minNum 即为最后的答案。
代码:
/*
* @lc app=leetcode.cn id=2404 lang=cpp
*
* [2404] 出现最频繁的偶数元素
*/
// @lc code=start
class Solution
{
public:
int mostFrequentEven(vector<int> &nums)
{
unordered_map<int, int> umap;
for (int num : nums)
if (num % 2 == 0)
{
if (umap.count(num))
umap[num]++;
else
umap[num] = 1;
}
if (umap.empty())
return -1;
int maxCount = 0;
int minNum = 0;
for (auto it = umap.begin(); it != umap.end(); it++)
{
if (it->second > maxCount)
{
maxCount = it->second;
minNum = it->first;
}
else if (it->second == maxCount)
minNum = min(minNum, it->first);
}
return minNum;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中 n 是数组 nums 的长度。遍历数组与哈希表都需要 O(n)。
空间复杂度:O(n),其中 n 是数组 nums 的长度。最坏情况下哈希表的长度为 n。