
题目描述
给你一个由 正整数 组成的数组 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
解法
方法一:计数
我们可以用一个哈希表或数组 \(cnt\) 记录每个元素出现的次数。
然后我们遍历 \(cnt\),找到出现次数最多的元素,记其出现次数为 \(mx\),累加出现次数等于 \(mx\) 的元素的出现次数,即为答案。
时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)。其中 \(n\) 为数组 \(nums\) 的长度。
| class Solution:
def maxFrequencyElements(self, nums: List[int]) -> int:
cnt = Counter(nums)
mx = max(cnt.values())
return sum(x for x in cnt.values() if x == mx)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | class Solution {
public int maxFrequencyElements(int[] nums) {
int[] cnt = new int[101];
for (int x : nums) {
++cnt[x];
}
int ans = 0, mx = -1;
for (int x : cnt) {
if (mx < x) {
mx = x;
ans = x;
} else if (mx == x) {
ans += x;
}
}
return ans;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | class Solution {
public:
int maxFrequencyElements(vector<int>& nums) {
int cnt[101]{};
for (int x : nums) {
++cnt[x];
}
int ans = 0, mx = -1;
for (int x : cnt) {
if (mx < x) {
mx = x;
ans = x;
} else if (mx == x) {
ans += x;
}
}
return ans;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | func maxFrequencyElements(nums []int) (ans int) {
cnt := [101]int{}
for _, x := range nums {
cnt[x]++
}
mx := -1
for _, x := range cnt {
if mx < x {
mx, ans = x, x
} else if mx == x {
ans += x
}
}
return
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | function maxFrequencyElements(nums: number[]): number {
const cnt: number[] = Array(101).fill(0);
for (const x of nums) {
++cnt[x];
}
let [ans, mx] = [0, -1];
for (const x of cnt) {
if (mx < x) {
mx = x;
ans = x;
} else if (mx === x) {
ans += x;
}
}
return ans;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | impl Solution {
pub fn max_frequency_elements(nums: Vec<i32>) -> i32 {
let mut cnt = [0; 101];
for &x in &nums {
cnt[x as usize] += 1;
}
let mut ans = 0;
let mut mx = -1;
for &x in &cnt {
if mx < x {
mx = x;
ans = x;
} else if mx == x {
ans += x;
}
}
ans
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | /**
* @param {number[]} nums
* @return {number}
*/
var maxFrequencyElements = function (nums) {
const cnt = new Array(101).fill(0);
for (const x of nums) {
++cnt[x];
}
let [ans, mx] = [0, -1];
for (const x of cnt) {
if (mx < x) {
mx = x;
ans = x;
} else if (mx === x) {
ans += x;
}
}
return ans;
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | public class Solution {
public int MaxFrequencyElements(int[] nums) {
int[] cnt = new int[101];
foreach (int x in nums) {
++cnt[x];
}
int ans = 0, mx = -1;
foreach (int x in cnt) {
if (mx < x) {
mx = x;
ans = x;
} else if (mx == x) {
ans += x;
}
}
return ans;
}
}
|