LeetCode 3005: Count Elements With Maximum Frequency (Frequency Table + Max Tracking)
LeetCode 3005Hash MapToday we solve LeetCode 3005 - Count Elements With Maximum Frequency.
Source: https://leetcode.com/problems/count-elements-with-maximum-frequency/
English
Problem Summary
Given an integer array, return the total number of elements whose value frequency equals the maximum frequency.
Key Insight
Count each number's frequency first, find the maximum frequency mx, then sum all frequencies equal to mx.
Algorithm
- Build a frequency map.
- Track mx = max(freq.values()).
- Accumulate freq[v] for every value with freq[v] == mx.
Complexity Analysis
Time: O(n).
Space: O(n).
Common Pitfalls
- Returning number of distinct max-frequency values instead of total element count.
- Forgetting to sum frequencies, not just count keys.
Reference Implementations (Java / Go / C++ / Python / JavaScript)
import java.util.*;
class Solution {
public int maxFrequencyElements(int[] nums) {
Map<Integer, Integer> cnt = new HashMap<>();
int mx = 0;
for (int x : nums) {
int c = cnt.getOrDefault(x, 0) + 1;
cnt.put(x, c);
mx = Math.max(mx, c);
}
int ans = 0;
for (int c : cnt.values()) {
if (c == mx) ans += c;
}
return ans;
}
}func maxFrequencyElements(nums []int) int {
cnt := map[int]int{}
mx := 0
for _, x := range nums {
cnt[x]++
if cnt[x] > mx {
mx = cnt[x]
}
}
ans := 0
for _, c := range cnt {
if c == mx {
ans += c
}
}
return ans
}class Solution {
public:
int maxFrequencyElements(vector<int>& nums) {
unordered_map<int, int> cnt;
int mx = 0;
for (int x : nums) {
mx = max(mx, ++cnt[x]);
}
int ans = 0;
for (auto &[k, c] : cnt) {
if (c == mx) ans += c;
}
return ans;
}
};from collections import Counter
class Solution:
def maxFrequencyElements(self, nums: list[int]) -> int:
cnt = Counter(nums)
mx = max(cnt.values())
return sum(c for c in cnt.values() if c == mx)var maxFrequencyElements = function(nums) {
const cnt = new Map();
let mx = 0;
for (const x of nums) {
const c = (cnt.get(x) || 0) + 1;
cnt.set(x, c);
mx = Math.max(mx, c);
}
let ans = 0;
for (const c of cnt.values()) {
if (c === mx) ans += c;
}
return ans;
};中文
题目概述
给定一个整数数组,返回所有“出现次数等于最大频次”的元素总个数。
核心思路
先统计频次,再找最大频次 mx,最后把所有频次等于 mx 的值累加起来。
算法步骤
- 用哈希表统计每个数字出现次数。
- 维护最大频次 mx。
- 二次遍历频次表,把 c == mx 的频次加到答案中。
复杂度分析
时间复杂度:O(n)。
空间复杂度:O(n)。
常见陷阱
- 误把答案写成“最大频次的不同数字个数”。
- 忘记累加频次本身,导致答案偏小。
多语言参考实现(Java / Go / C++ / Python / JavaScript)
import java.util.*;
class Solution {
public int maxFrequencyElements(int[] nums) {
Map<Integer, Integer> cnt = new HashMap<>();
int mx = 0;
for (int x : nums) {
int c = cnt.getOrDefault(x, 0) + 1;
cnt.put(x, c);
mx = Math.max(mx, c);
}
int ans = 0;
for (int c : cnt.values()) {
if (c == mx) ans += c;
}
return ans;
}
}func maxFrequencyElements(nums []int) int {
cnt := map[int]int{}
mx := 0
for _, x := range nums {
cnt[x]++
if cnt[x] > mx {
mx = cnt[x]
}
}
ans := 0
for _, c := range cnt {
if c == mx {
ans += c
}
}
return ans
}class Solution {
public:
int maxFrequencyElements(vector<int>& nums) {
unordered_map<int, int> cnt;
int mx = 0;
for (int x : nums) {
mx = max(mx, ++cnt[x]);
}
int ans = 0;
for (auto &[k, c] : cnt) {
if (c == mx) ans += c;
}
return ans;
}
};from collections import Counter
class Solution:
def maxFrequencyElements(self, nums: list[int]) -> int:
cnt = Counter(nums)
mx = max(cnt.values())
return sum(c for c in cnt.values() if c == mx)var maxFrequencyElements = function(nums) {
const cnt = new Map();
let mx = 0;
for (const x of nums) {
const c = (cnt.get(x) || 0) + 1;
cnt.set(x, c);
mx = Math.max(mx, c);
}
let ans = 0;
for (const c of cnt.values()) {
if (c === mx) ans += c;
}
return ans;
};
Comments