中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何解決前K個高頻元素問題

發布時間:2021-12-15 13:41:52 來源:億速云 閱讀:127 作者:小新 欄目:大數據

這篇文章主要介紹了LeetCode如何解決前K個高頻元素問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

題目

給定一個非空的整數數組,返回其中出現頻率前 k 高的元素。

示例 1:
輸入: nums = [1,1,1,2,2,3], k = 2
輸出: [1,2]
示例 2:
輸入: nums = [1], k = 1
輸出: [1]

提示:

你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 數組中不相同的元素的個數。
你的算法的時間復雜度必須優于 O(n log n) , n 是數組的大小。
題目數據保證答案唯一,換句話說,數組中前 k 個高頻元素的集合是唯一的。
你可以按任意順序返回答案。
思路
  • 首先遍歷整個數組,并使用哈希表記錄每個數字出現的次數,并形成一個「出現次數數組」。找出原數組的前 kk 個高頻元素,就相當于找出「出現次數數組」的前 kk 大的值。

  • 最簡單的做法是給「出現次數數組」排序。但由于可能有 O(N)O(N) 個不同的出現次數(其中 NN 為原數組長度),故總的算法復雜度會達到 O(N\log N)O(NlogN),不滿足題目的要求。

  • 在這里,我們可以利用堆的思想:建立一個小頂堆,然后遍歷「出現次數數組」:

    • 如果堆的元素個數小于 kk,就可以直接插入堆中。

    • 如果堆的元素個數等于 kk,則檢查堆頂與當前出現次數的大小。如果堆頂更大,說明至少有 kk 個數字的

    • 出現次數比當前值大,故舍棄當前值;否則,就彈出堆頂,并將當前值插入堆中。

    • 遍歷完成后,堆中的元素就代表了「出現次數數組」中前 kk 大的值

代碼
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer,Integer> occ = new HashMap<Integer,Integer>();
        for (int num : nums) {
            occ.put(num,occ.getOrDefault(num,0)+1);
        }
        PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });
        for (Map.Entry<Integer, Integer> integerIntegerEntry : occ.entrySet()) {
            int num = integerIntegerEntry.getKey();
            int count = integerIntegerEntry.getValue();
            if(queue.size() == k){
                if(queue.peek()[1] < count){
                    queue.poll();
                    queue.offer(new int[]{num,count});
                }
            }else {
                queue.offer(new int[]{num,count});
            }
        }
        int[] ret = new int[k];
        for (int i = 0; i < k; i++) {
            ret[i] = queue.poll()[0];
        }
        return ret;
    }
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“LeetCode如何解決前K個高頻元素問題”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新营市| 东乡县| 咸阳市| 苍南县| 固镇县| 且末县| 隆安县| 瑞金市| 乌鲁木齐市| 射洪县| 乌海市| 安仁县| 策勒县| 岑溪市| 台湾省| 肥乡县| 连云港市| 乐昌市| 崇信县| 五常市| 穆棱市| 江都市| 紫金县| 南雄市| 浦北县| 诸暨市| 晋州市| 横山县| 广汉市| 龙山县| 江西省| 霍林郭勒市| 交城县| 江川县| 萝北县| 监利县| 张家口市| 团风县| 茂名市| 西宁市| 宁晋县|