[leetcode]347. Top K Frequent Elements

這是leetcode第347題目數組

Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].ide

題目意思:找出數組中前k個常常出現的元素。this

解題思路

1.數組循環一遍,把元素的出現次數都記錄下來
2.對元素出現次數作降序排序
3.選擇前k個元素輸出爲結果code

代碼實現

public class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        ArrayList<Element> elementList = new ArrayList<>();
        //Map保存的是元素和elementList對應元素下標的鍵值對.空間換時間.
        HashMap<Integer, Integer> number2IndexMap = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i];
            if (number2IndexMap.containsKey(num)) {
                //若是Map中已保存該num的鍵值對,則獲取出來而且count自增.
                int index = number2IndexMap.get(num);
                elementList.get(index).count++;
            } else {
                //不然,新建一組鍵值對,保存到Map中.
                Element element = new Element(num);
                elementList.add(element);
                number2IndexMap.put(num, elementList.size() - 1);
            }
        }
        //降序排序elementList.
        Collections.sort(elementList);
        //把前面k個輸出到resultList中.
        List<Integer> resultList = new ArrayList<>();
        for (int i = 0; i < k; i++) {
            resultList.add(elementList.get(i).number);
        }
        return resultList;
    }

    /**
     * 用來記錄元素出現的次數
     */
    private static class Element implements Comparable<Element> {
        public final int number;
        public int count = 0;
        public Element(int number) {
            this.number = number;
        }

        @Override
        public int compareTo(Element element) {
            return element.count - this.count;
        }
    }
}
相關文章
相關標籤/搜索