Leetcode2404. 出现最频繁的偶数元素

该问题通过使用哈希表来统计数组中偶数元素的出现次数,找到出现次数最多的偶数,并在有多个元素出现次数相同时,返回最小的那个。时间复杂度和空间复杂度均为线性。

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值