题目来源: 2404. 出现最频繁的偶数元素
题目描述:
- 描述: 给你一个整数数组 nums ,返回出现最频繁的偶数元素。 如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1 。
- 示例:
示例1:
输入:nums = [0,1,2,2,4,4,1]
输出:2
- 解释:这个数组中的偶数元素为 0、2 和 4 ,并且在数组这些元素中,2 和 4 出现的次数是最多的。 而我们需要返回最小的那个元素的,即返回 2
示例2:
输入:nums = [29,47,21,41,13,37,25,7]
输出:-1
- 解释:这个数组中并不存在偶数元素
示例3:
输入:nums = [4,4,4,9,2,4]
输出:4
- 解释:4 是数组中出现最为频繁的偶数元素
思路
我们遍历数组nums,并且使用哈希表 count,用来记录数组中偶数元素的出现次数。使用变量res 和变量ct 分别用于记录当前数组中出现次数最多的元素的值以及这个值所对应的出现的次数。通过遍历哈希表中的元素,如果元素的出现次数是大于ct的值 或者出现次数是等于ct的值 且元素的值小于res的值,那么我们就用变量res 来记录当前遍历的元素值,并且用 变量ct 记录当前遍历的元素在数组中的出现次数。
具体实现
class Solution {
public int mostFrequentEven(int[] nums) {
Map<Integer, Integer> count = new HashMap<Integer, Integer>();
for (int x : nums) {
if (x % 2 == 0) {
count.put(x, count.getOrDefault(x, 0) + 1);
}
}
int res = -1, ct = 0;
for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
if (res == -1 || entry.getValue() > ct || entry.getValue() == ct && res > entry.getKey()) {
res = entry.getKey();
ct = entry.getValue();
}
}
return res;
}
}
复杂度分析:
-
时间复杂度:O(n),其中 n 是数组 nums 的长度。遍历数组与哈希表都需要O(n)
-
空间复杂度:O(n),保存哈希表需要O(n)。