亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

平南县| 岑巩县| 肥东县| 子长县| 乐东| 合阳县| 信宜市| 邯郸市| 和硕县| 宿州市| 黄陵县| 凤台县| 衡东县| 若羌县| 土默特左旗| 黄冈市| 鹤庆县| 伊宁市| 兴安盟| 乌海市| 营口市| 河津市| 阿城市| 浮梁县| 永丰县| 肇源县| 大宁县| 沙湾县| 南召县| 虹口区| 平顺县| 秦安县| 琼海市| 苏州市| 梁河县| 莒南县| 碌曲县| 公主岭市| 昂仁县| 南和县| 扶沟县|