3005. 最大频率元素计数

题目

给你一个由 正整数 组成的数组 nums 。

返回数组 nums 中所有具有 最大 频率的元素的 总频率 。

元素的 频率 是指该元素在数组中出现的次数。

示例 1:

输入:nums = [1,2,2,3,1,4] 输出:4 解释:元素 1 和 2 的频率为 2 ,是数组中的最大频率。 因此具有最大频率的元素在数组中的数量是 4 。

示例 2:

输入:nums = [1,2,3,4,5] 输出:5 解释:数组中的所有元素的频率都为 1 ,是最大频率。 因此具有最大频率的元素在数组中的数量是 5 。

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

代码

class Solution {
public:
    int maxFrequencyElements(std::vector<int>& nums) {
        // 使用一个大小为 101 的数组作为频率表 (哈希表)。
        // 索引对应数字 1-100,值对应其出现的频率。
        // 这是针对本题数字范围限制的最佳优化。
        std::vector<int> freq(101, 0);

        // 用于追踪当前的最大频率。
        int maxFreq = 0;
        // 最终结果,即所有最大频率元素的总频率。
        int totalFreq = 0;

        // 对数组进行单次遍历,完成所有计算。
        for (int num : nums) {
            // 对应数字的频率加 1。
            freq[num]++;

            // 获取当前数字更新后的频率。
            int currentFreq = freq[num];

            // 情况一:发现了新的更高频率。
            if (currentFreq > maxFreq) {
                // 更新最大频率。
                maxFreq = currentFreq;
                // 重置总频率。因为我们找到了一个新的、更高的频率,
                // 之前所有元素的频率都不再是最大频率了。
                // 当前的总频率就是这第一个达到新最大频率的元素的频率。
                totalFreq = currentFreq;
            }
            // 情况二:又一个元素达到了当前的最大频率。
            else if (currentFreq == maxFreq) {
                // 将这个元素的频率(也就是 maxFreq)累加到总频率中。
                totalFreq += maxFreq;
            }
        }
        
        return totalFreq;
    }
};