3 ways

https://discuss.leetcode.com/topic/48158/3-java-solution-using-array-maxheap-treemap

TreeSet

public class Solution {
    class Number {
        int val;
        int freq;

        public Number(int v, int f) {
            this.val = v;
            this.freq = f;
        }
    }

    public List<Integer> topKFrequent(int[] nums, int k) {
        Map<Integer, Number> map = new HashMap<>();
        TreeSet<Number> set = new TreeSet<>(new Comparator<Number>(){
            public int compare(Number n1, Number n2) {
                if (n1.freq > n2.freq) {
                    return -1;
                } else if (n1.freq < n2.freq) {
                    return 1;
                } else {
                    return n1.val - n2.val;
                }
            }
        });

        for (int num : nums) {
            if (!map.containsKey(num)) {
                Number number = new Number(num, 1);
                map.put(num, number);
                set.add(number);
            } else {
                Number number = map.get(num);
                set.remove(number);
                number.freq = number.freq + 1;
                set.add(number);
            }
        }

        // for (int num : map.keySet()) {
        //     set.add(map.get(num));
        // }

        List<Integer> result = new ArrayList<>();
        Iterator it = set.iterator();
        while (result.size() < k) {
            result.add(((Number)it.next()).val);
            // if (!set.isEmpty()) {
            //     Number number = set.pollFirst();
            //     result.add(number.val);
            // }
        }

        return result;
    }
}

results matching ""

    No results matching ""