// https://leetcode.com/problems/most-frequent-even-element
// T: O(N)
// S: O(N)

import java.util.HashMap;
import java.util.Map;

public class MostFrequentEvenElement {
    public int mostFrequentEven(int[] nums) {
        final Map<Integer, Integer> evenFrequencies = new HashMap<>();
        int maxFrequency = 0, smallestEvenNumber = -1;

        for (int element : nums) {
            if (element % 2 == 1) {
                continue;
            }

            evenFrequencies.put(element, evenFrequencies.getOrDefault(element, 0) + 1);
            if (evenFrequencies.get(element) > maxFrequency) {
                maxFrequency = evenFrequencies.get(element);
                smallestEvenNumber = element;
            } else if (evenFrequencies.get(element) == maxFrequency) {
                smallestEvenNumber = Math.min(smallestEvenNumber, element);
            }
        }

        return smallestEvenNumber;
    }
}