【LeetCode 每日一题】2404. 出现最频繁的偶数元素

97 阅读1分钟

2404. 出现最频繁的偶数元素

难度:简单

时间:2023/04/13


给你一个整数数组 nums ,返回出现最频繁的偶数元素。

如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1

示例 1:

输入:nums = [0,1,2,2,4,4,1]
输出:2
解释:
数组中的偶数元素为 0、2 和 4 ,在这些元素中,2 和 4 出现次数最多。
返回最小的那个,即返回 2 。

示例 2:

输入:nums = [4,4,4,9,2,4]
输出:4
解释:4 是出现最频繁的偶数元素。

示例 3:

输入:nums = [29,47,21,41,13,37,25,7]
输出:-1
解释:不存在偶数元素。

提示:

  • 1 <= nums.length <= 2000
  • 0 <= nums[i] <= 10^5

解题思路:

  • 使用哈希表统计所有偶数元素出现的次数,然后找出出现次数最多且值最小的偶数元素。
  • Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。
  • Counter()collections 库中的一个函数,可以用来统计一个 python 列表、字符串、元组等可迭代对象中每个元素出现的次数,并返回一个字典。可以看下常用的 Counter() 例子:
from collections import Counter
 
nums = [1, 1, 2, 2, 6, 6, 7, 8]
count = Counter(nums)  
for k, v in count.items():
    print(k, v)
print(count)
class Solution:
    def mostFrequentEven(self, nums: List[int]) -> int:
        cnt = Counter(x for x in nums if x % 2 == 0)
        ans, mx = -1, 0
        for x, v in cnt.items():
            if v > mx or (v == mx and ans > x):
                ans, mx = x, v
        return ans
​
  • golang的map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化才能使用。

  • 1、map的定义

    • 定义: map[KeyType]ValueType
    • 其中,KeyType表示键的类型,ValueType表示对应值的类型。
  • map类型变量默认初始值为 nil,要使用make()函数分配内存。

    • 语法 : make(map[KeyType]ValueType, [cap])
    • 其中,cap为map的容量,参数不是必须给的。
func mostFrequentEven(nums []int) int {
    cnt := map[int]int{}
    for _, x := range nums {
        if x%2 == 0 {
            cnt[x]++
        }
    }
    ans, mx := -1, 0
    for x, v := range cnt {
        if mx < v || (mx == v && x < ans) {
            ans, mx = x, v
        }
    }
    return ans
}