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

溫馨提示×

溫馨提示×

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

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

Python如何返回前K個最頻繁的元素

發布時間:2022-03-18 14:02:56 來源:億速云 閱讀:162 作者:iii 欄目:云計算

本篇內容介紹了“Python如何返回前K個最頻繁的元素”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

題目描述

題目描述

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

Example
[1,1,1,2,2,3],k = 2,輸出[1,2]

如果n是數組的大小,要求給出時間復雜度小于O(n log n)的算法。

算法分析

題目要求我們輸出前k個出現最頻繁的元素,因為k最大可以等于n,所以在最壞情況下我們需要統計所有數字的出現次數。那么這個問題就分成了兩個部分:

  1. 統計所有不同的數字出現的次數

  2. 找出出現次數前k大的數字

對于問題1,因為數字可能很大,我們需要借助HashMap進行統計,時間復雜度是O(n)的。對于問題2,有多種方法:一種簡單的方法是,對所有的次數快速排序,然后輸出前k個,這樣的時間復雜度是O(n log n),不符合本題的要求。我們需要進行優化。

因為最后只需要返回k個數字,所以我們只需要一直維護一個大小為k的小根堆。當新的數字出現的次數大于堆中最小的次數時,我們對堆進行更新。時間復雜度是O(n log k),是符合題目要求的。

那有沒有辦法進一步優化呢?因為k最壞情況下還是等于n的,n log k不是很理想。那么我們就需要換一種排序的方法。有一種排序的方法,其復雜度只和需要排序的數字的大小有關,而在本題中,需要排序的數字大小至多為n(某個數出現了n次)。答案是桶排序!桶排序就是用一個數組bucket記錄每個數字出現的次數,每次把數字丟到相應編號的桶中,然后從后往前窮舉每一個桶,取出其中的元素直到取滿k個。時間復雜度是O(n)。
最后本問題的最優算法的時間復雜度是O(n)。

參考程序

Python如何返回前K個最頻繁的元素

“Python如何返回前K個最頻繁的元素”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

武鸣县| 辉南县| 香格里拉县| 东台市| 泰兴市| 江油市| 梧州市| 阿拉善右旗| 乌兰浩特市| 延吉市| 宣武区| 桦川县| 江源县| 同德县| 桂阳县| 盖州市| 双流县| 贺兰县| 罗定市| 揭东县| 桃园县| 诸城市| 朝阳县| 安福县| 兴文县| 富源县| 曲靖市| 泾川县| 怀宁县| 成都市| 镇原县| 天峨县| 自贡市| 河北区| 乌兰察布市| 嘉善县| 贵州省| 通州区| 福州市| 志丹县| 丹东市|