题目
给你一个由 正整数 组成的数组 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 <= 1001 <= 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;
}
};