Given an integer array nums, return the most frequent even element.
If there is a tie, return the smallest one. If there is no such element, return -1.
Example 1:
Input: nums = [0,1,2,2,4,4,1]
Output: 2
Explanation:
The even elements are 0, 2, and 4. Of these, 2 and 4 appear the most.
We return the smallest one, which is 2.
Example 2:
Input: nums = [4,4,4,9,2,4]
Output: 4
Explanation: 4 is the even element appears the most.
Example 3:
Input: nums = [29,47,21,41,13,37,25,7]
Output: -1
Explanation: There is no even element.
Constraints:
1 <= nums.length <= 2000
0 <= nums[i] <= 105
Solutions
Solution 1: Hash Table
Thinking
With \(n\le 2000\), one pass can count even frequencies. We need the most frequent even, breaking ties by the smallest value. A hash map of counts plus a linear scan of the pairs is enough; sorting is unnecessary.
We use a hash table \(cnt\) to count the occurrence of all even elements, and then find the even element with the highest occurrence and the smallest value.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array.