精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

每日算法:前 K 個高頻元素

開發 前端 算法
桶排序 (Bucket sort)的工作的原理:假設輸入數據服從均勻分布,將數據分到有限數量的桶里,每個桶再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排)。

 

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

示例 1:

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

示例 2:

  1. 輸入: nums = [1], k = 1 
  2. 輸出: [1] 

提示:

  • 你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 數組中不相同的元素的個數。
  • 你的算法的時間復雜度必須優于 O(nlogn) , n 是數組的大小。
  • 題目數據保證答案唯一,換句話說,數組中前 k 個高頻元素的集合是唯一的。
  • 你可以按任意順序返回答案。

解法一:map+數組

利用 map 記錄每個元素出現的頻率,利用數組來比較排序元素

代碼實現:

  1. let topKFrequent = function(nums, k) { 
  2.     let map = new Map(), arr = [...new Set(nums)] 
  3.     nums.map((num) => { 
  4.         if(map.has(num)) map.set(num, map.get(num)+1) 
  5.         else map.set(num, 1) 
  6.     }) 
  7.      
  8.     return arr.sort((a, b) => map.get(b) - map.get(a)).slice(0, k); 
  9. }; 

復雜度分析:

  • 時間復雜度:O(nlogn)
  • 空間復雜度:O(n)

題目要求算法的時間復雜度必須優于 O(n log n) ,所以這種實現不合題目要求

解法二:map + 小頂堆

遍歷一遍數組統計每個元素的頻率,并將元素值( key )與出現的頻率( value )保存到 map 中

通過 map 數據構建一個前 k 個高頻元素小頂堆,小頂堆上的任意節點值都必須小于等于其左右子節點值,即堆頂是最小值。

具體步驟如下:

  • 遍歷數據,統計每個元素的頻率,并將元素值( key )與出現的頻率( value )保存到 map 中
  • 遍歷 map ,將前 k 個數,構造一個小頂堆
  • 從 k 位開始,繼續遍歷 map ,每一個數據出現頻率都和小頂堆的堆頂元素出現頻率進行比較,如果小于堆頂元素,則不做任何處理,繼續遍歷下一元素;如果大于堆頂元素,則將這個元素替換掉堆頂元素,然后再堆化成一個小頂堆。
  • 遍歷完成后,堆中的數據就是前 k 大的數據

代碼實現:

  1. let topKFrequent = function(nums, k) { 
  2.     let map = new Map(), heap = [,] 
  3.     nums.map((num) => { 
  4.         if(map.has(num)) map.set(num, map.get(num)+1) 
  5.         else map.set(num, 1) 
  6.     }) 
  7.      
  8.     // 如果元素數量小于等于 k 
  9.     if(map.size <= k) { 
  10.         return [...map.keys()] 
  11.     } 
  12.      
  13.     // 如果元素數量大于 k,遍歷map,構建小頂堆 
  14.     let i = 0 
  15.     map.forEach((value, key) => { 
  16.         if(i < k) { 
  17.             // 取前k個建堆, 插入堆 
  18.             heap.push(key
  19.             // 原地建立前 k 堆 
  20.             if(i === k-1) buildHeap(heap, map, k) 
  21.         } else if(map.get(heap[1]) < value) { 
  22.             // 替換并堆化 
  23.             heap[1] = key 
  24.             // 自上而下式堆化第一個元素 
  25.             heapify(heap, map, k, 1) 
  26.         } 
  27.         i++ 
  28.     }) 
  29.     // 刪除heap中第一個元素 
  30.     heap.shift() 
  31.     return heap 
  32. }; 
  33.  
  34. // 原地建堆,從后往前,自上而下式建小頂堆 
  35. let buildHeap = (heap, map, k) => { 
  36.     if(k === 1) return 
  37.     // 從最后一個非葉子節點開始,自上而下式堆化 
  38.     for(let i = Math.floor(k/2); i>=1 ; i--) { 
  39.         heapify(heap, map, k, i) 
  40.     } 
  41.  
  42. // 堆化 
  43. let heapify = (heap, map, k, i) => { 
  44.     // 自上而下式堆化 
  45.     while(true) { 
  46.         let minIndex = i 
  47.         if(2*i <= k && map.get(heap[2*i]) < map.get(heap[i])) { 
  48.             minIndex = 2*i 
  49.         } 
  50.         if(2*i+1 <= k && map.get(heap[2*i+1]) < map.get(heap[minIndex])) { 
  51.             minIndex = 2*i+1 
  52.         } 
  53.         if(minIndex !== i) { 
  54.             swap(heap, i, minIndex) 
  55.             i = minIndex 
  56.         } else { 
  57.             break 
  58.         } 
  59.     } 
  60.  
  61. // 交換 
  62. let swap = (arr, i , j) => { 
  63.     let temp = arr[i] 
  64.     arr[i] = arr[j] 
  65.     arr[j] = temp 

復雜度分析:

  • 時間復雜度:遍歷數組需要 O(n) 的時間復雜度,一次堆化需要 O(logk) 時間復雜度,所以利用堆求 Top k 問題的時間復雜度為 O(nlogk)
  • 空間復雜度:O(n)

解法三:桶排序

這里取前k個高頻元素,使用計數排序不再適合,在上題目中使用計數排序,將 i 元素出現的次數存儲在 bucket[i] ,但這種存儲不能保證 bucket 數組上值是有序的,例如 bucket=[0,3,1,2] ,即元素 0 未出現,元素 1 出現 3 次,元素 2 出現 1 次,元素 3 出現 2 次,所以計數排序不適用于取前k個高頻元素,不過,不用怕,計數排序不行,還有桶排序。

桶排序是計數排序的升級版。它也是利用函數的映射關系。

桶排序 (Bucket sort)的工作的原理:假設輸入數據服從均勻分布,將數據分到有限數量的桶里,每個桶再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排)。

  • 首先使用 map 來存儲頻率
  • 然后創建一個數組(有數量的桶),將頻率作為數組下標,對于出現頻率不同的數字集合,存入對應的數組下標(桶內)即可。

代碼實現:

  1. let topKFrequent = function(nums, k) { 
  2.     let map = new Map(), arr = [...new Set(nums)] 
  3.     nums.map((num) => { 
  4.         if(map.has(num)) map.set(num, map.get(num)+1) 
  5.         else map.set(num, 1) 
  6.     }) 
  7.      
  8.     // 如果元素數量小于等于 k 
  9.     if(map.size <= k) { 
  10.         return [...map.keys()] 
  11.     } 
  12.      
  13.     return bucketSort(map, k) 
  14. }; 
  15.  
  16. // 桶排序 
  17. let bucketSort = (map, k) => { 
  18.     let arr = [], res = [] 
  19.     map.forEach((value, key) => { 
  20.         // 利用映射關系(出現頻率作為下標)將數據分配到各個桶中 
  21.         if(!arr[value]) { 
  22.             arr[value] = [key
  23.         } else { 
  24.             arr[value].push(key
  25.         } 
  26.     }) 
  27.     // 倒序遍歷獲取出現頻率最大的前k個數 
  28.     for(let i = arr.length - 1;i >= 0 && res.length < k;i--){ 
  29.         if(arr[i]) { 
  30.             res.push(...arr[i]) 
  31.         } 
  32.  } 
  33.  return res 

復雜度分析:

  • 時間復雜度:O(n)
  • 空間復雜度:O(n)

leetcode:https://leetcode-cn.com/problems/top-k-frequent-elements/solution/javascript-qian-k-ge-gao-pin-yuan-su-by-user7746o/ 

責任編輯:武曉燕 來源: 三分鐘學前端
相關推薦

2025-04-03 09:56:40

Python算法開發

2021-09-08 09:52:34

語言

2021-10-29 07:25:32

螺旋矩陣整數

2021-11-19 07:54:40

前端

2021-11-12 09:44:03

字符串算法復雜度

2021-10-28 19:33:36

矩陣圖像內存

2021-08-30 14:34:10

有效算法字符

2020-08-16 12:38:32

Python算法編程

2018-11-08 16:18:07

JavaScript前端

2021-09-03 09:41:36

字符串時間復雜度

2021-11-04 09:59:03

動態規劃策略

2021-09-30 09:58:14

路徑總和二叉樹

2021-12-07 06:55:17

節流函數Throttle

2021-09-29 10:19:00

算法平衡二叉樹

2021-10-27 10:43:36

數據流中位數偶數

2021-12-09 10:57:19

防抖函數 Debounce

2014-11-28 16:08:33

射頻識別RFID

2021-09-10 08:31:54

翻轉字符串單詞

2021-09-02 09:22:13

算法無重復字符

2024-05-27 00:05:00

點贊
收藏

51CTO技術棧公眾號

最好看的2019的中文字幕视频| 色久优优欧美色久优优| 丁香五月网久久综合| 日韩手机在线观看| 精品视频99| 91精品视频网| 国产精品欧美激情在线观看| 免费在线观看av网站| 国产成人在线电影| 国产激情视频一区| 久久国产免费观看| 成人影院天天5g天天爽无毒影院| 欧美一区二区三区四区五区| 精品欧美一区免费观看α√| 久操视频在线| 久久精品欧美日韩| 成人91视频| 曰批又黄又爽免费视频| 国产欧美日本| 欧美刺激性大交免费视频| 91久久免费视频| baoyu135国产精品免费| 5566中文字幕一区二区电影 | 欧美日本一区| 国产一区二区三区视频免费| 国产大尺度视频| 视频欧美精品| 欧美最新大片在线看| 免费毛片网站在线观看| h视频在线免费观看| 国产欧美一区二区三区网站| 国产亚洲自拍偷拍| 亚洲第九十九页| 精品无人码麻豆乱码1区2区| 青草成人免费视频| 国产手机在线视频| 尹人成人综合网| 免费97视频在线精品国自产拍| xxxx日本免费| 五月激激激综合网色播| 亚洲成色777777在线观看影院| 欧美日韩免费看| 国产日韩av在线播放| 亚洲精品男人的天堂| 雨宫琴音一区二区在线| 欧美精品在线观看| 欧美手机在线观看| 羞羞答答成人影院www| 综合av色偷偷网| 调教驯服丰满美艳麻麻在线视频 | 欧美大香线蕉线伊人久久国产精品| 国产av无码专区亚洲av| 国产一区二区三区四区在线观看| 国产日本欧美一区二区三区| 一区二区三区麻豆| 美女视频一区二区三区| 国产精品一区二区三区免费视频 | 国内偷拍精品视频| 欧美三级网页| 韩国日本不卡在线| 天堂网av手机版| 美女诱惑黄网站一区| 国产不卡在线观看| 一区两区小视频| 精品中文字幕一区二区| 91九色蝌蚪国产| 国产成人精品一区二区无码呦| 国产精品一区二区男女羞羞无遮挡| 亚洲一区二区三区乱码aⅴ| 国产三级三级在线观看| 成人性生交大合| 九九九九久久久久| 成人三级黄色免费网站| 国产精品久久久久久一区二区三区 | 97精品久久人人爽人人爽| 精品午夜一区二区三区在线观看| 亚洲影院高清在线| 日日躁夜夜躁白天躁晚上躁91| 26uuu亚洲综合色欧美| 先锋影音一区二区三区| 国产二区三区在线| 精品久久久国产精品999| 嫩草av久久伊人妇女超级a| 日韩护士脚交太爽了| 日韩欧美资源站| 中文字幕5566| 欧美hd在线| 久久久免费观看| 中文字幕一区二区三区四区欧美| 久久国产三级精品| 国产亚洲第一区| 91在线网址| 亚洲永久免费视频| 国产三级日本三级在线播放| 日韩区一区二| 亚洲一级片在线看| 久久久久久天堂| 日日夜夜精品免费视频| 51午夜精品| 国产免费av在线| 一区二区三区.www| 爱情岛论坛成人| silk一区二区三区精品视频| 国产亚洲精品va在线观看| 538任你躁在线精品视频网站| 国产视频一区欧美| 亚洲最大成人网色| av中文字幕一区二区三区| 亚洲电影在线播放| 亚洲精品国产一区二区三区| 香蕉久久夜色精品国产使用方法| 久久影视免费观看| 九九热最新视频| 99久久国产综合色|国产精品| 一本一本久久a久久精品综合妖精| 国产美女高潮在线观看| 91精品国产一区二区人妖| 国产精品亚洲无码| 亚洲国产1区| 国产日韩欧美日韩| 狠狠色伊人亚洲综合网站l| 亚洲一区二区三区四区中文字幕| 欧美精品性生活| 人人网欧美视频| 九九九热精品免费视频观看网站| 中文字幕91爱爱| 91在线精品一区二区| 日本熟妇人妻xxxx| 榴莲视频成人app| 日韩在线激情视频| 中文字幕日日夜夜| 久久精品视频在线看| 国产资源在线视频| 岛国精品一区| 欧美激情一级精品国产| www.久久综合| 亚洲精品日产精品乱码不卡| 污视频免费在线观看网站| 精品中文字幕一区二区三区av| 国产69精品久久久久9| 国产美女www爽爽爽视频| 国产日韩亚洲欧美综合| 无码人妻丰满熟妇区五十路百度| 欧美18免费视频| 97在线观看免费| 亚洲人成色777777精品音频| 亚洲va欧美va国产va天堂影院| 欧美日韩一区二区区| 午夜国产精品视频| 99精品国产高清一区二区| av在线播放观看| 日韩免费一区二区| 久久免费视频6| av在线不卡观看免费观看| 无码专区aaaaaa免费视频| 精品亚洲自拍| 日韩av手机在线观看| 伦理片一区二区三区| 在线观看日产精品| 自拍偷拍第9页| 国产一二三精品| 国产免费内射又粗又爽密桃视频| 深夜激情久久| 午夜精品一区二区三区在线视频| 亚洲日本在线播放| 在线观看不卡视频| 成人信息集中地| 国产白丝精品91爽爽久久| 日本一区午夜艳熟免费| 天天做夜夜做人人爱精品| 日本免费久久高清视频| 992tv免费直播在线观看| 777午夜精品视频在线播放| 九九热精彩视频| www国产精品av| 91人人澡人人爽人人精品| 91精品国产自产在线观看永久∴| 国产精品免费看一区二区三区| 午夜伦理福利在线| 日韩在线观看你懂的| 开心激情综合网| 欧洲国产伦久久久久久久| 精品无码一区二区三区蜜臀| 高清久久久久久| 国产一级不卡毛片| 日韩免费一区| 激情欧美一区二区三区中文字幕 | 91九色对白| 不卡av影片| 久久久久999| 色综合久久网女同蕾丝边| 欧美乱妇15p| 国产污视频在线观看| 国产婷婷色一区二区三区| 中文字幕在线视频一区二区| 亚洲欧美日本国产专区一区| 视频一区二区视频| 亚洲国产合集| 91青青草免费在线看| 成人在线爆射| 欧美激情按摩在线| 永久免费av在线| 日韩av在线导航| 国产三级伦理片| 欧美亚洲一区二区三区四区| 黄网站免费在线| 中文字幕色av一区二区三区| 中出视频在线观看| 国产乱码字幕精品高清av | 激情综合婷婷| 国产精品女人网站| 午夜影院一区| 欧美丰满少妇xxxxx| 91成人高清| 国产香蕉一区二区三区在线视频| 亚洲乱熟女一区二区| 欧美日韩第一区日日骚| 中文字幕在线播| 无码av免费一区二区三区试看| 日本妇女毛茸茸| 国产精品乱码久久久久久| 三上悠亚ssⅰn939无码播放 | 51精品秘密在线观看| 中文人妻av久久人妻18| 香蕉乱码成人久久天堂爱免费| 欧美一区免费观看| 国产精品成人免费在线| 欧美人妻一区二区三区| jiyouzz国产精品久久| 韩国黄色一级片| 国产毛片精品视频| 亚洲涩涩在线观看| 久久精品国产一区二区三 | 国产a区久久久| 亚洲精品国产久| 韩国女主播成人在线观看| 一区二区三区视频在线观看免费| 久久精品九九| 久久久久狠狠高潮亚洲精品| 9色精品在线| 黄色大片在线免费看| 最新亚洲一区| 日韩免费视频播放| 国产深夜精品| 黄色av免费在线播放| 久久精品人人| 一级黄色香蕉视频| 男女性色大片免费观看一区二区 | www.欧美三级电影.com| 在线激情小视频| www.色综合| h片在线播放| 欧美精品videosex牲欧美| 国产福利在线免费观看| 久久久久久久久亚洲| 久草在线中文最新视频| 日本高清不卡在线| 国产一区二区主播在线| 国产日韩欧美影视| 日韩av综合| 精品91免费| 国产成人av| 中国成人亚色综合网站| 午夜激情一区| 国产特级淫片高清视频| 久久青草久久| 手机av在线网| 国产99一区视频免费| 国产熟女高潮一区二区三区| 久久蜜臀中文字幕| 精品伦精品一区二区三区视频密桃 | 亚洲第一成人网站| 国产精品欧美一区喷水| 亚洲 欧美 变态 另类 综合| 亚洲一区av在线| 波多野结衣电车| 91精品国产综合久久精品麻豆| www黄色在线观看| 国产丝袜一区二区三区免费视频| av网站无病毒在线| 欧美激情三级免费| 欧美日韩五码| 亚洲一区二区三区在线视频| 理论片一区二区在线| 水蜜桃亚洲精品| 亚洲一级网站| 欧美成人黄色网址| 国产suv一区二区三区88区| 国产精品一二三区在线观看| ...中文天堂在线一区| 91精品国产乱码在线观看| 欧美亚洲国产bt| 丰满人妻一区二区三区免费| 国产亚洲精品久久久久久777 | 亚洲综合另类小说| 国产精品午夜一区二区| 精品国产百合女同互慰| 97在线观看免费观看高清 | 成人av在线播放观看| 免费看的黄色欧美网站| 91丨porny丨九色| 欧美国产一区二区| 日本午夜精品理论片a级app发布| 精品视频一区二区不卡| 凸凹人妻人人澡人人添| 久久综合亚洲社区| 免费观看成人性生生活片 | 成年人在线视频免费观看| 欧美激情欧美激情| 国产精品va视频| 亚洲mv在线看| 久久蜜桃资源一区二区老牛| www.555国产精品免费| 亚洲欧洲韩国日本视频| 亚洲毛片一区二区三区| 日韩av一区在线| 男男gaygays亚洲| 91在线观看免费观看 | 神马久久桃色视频| 成人欧美一区二区三区的电影| 国产精品一区二区a| 欧美在线高清| 天天综合天天添夜夜添狠狠添| 国产日产欧美精品一区二区三区| 久久午夜免费视频| 精品国产91洋老外米糕| 在线中文字幕-区二区三区四区| 国产精品视频久久| 成人高清av| 搡女人真爽免费午夜网站| 久久只精品国产| 中文字幕精品三级久久久| 日韩av在线导航| 狼人综合视频| 精品伊人久久大线蕉色首页| 91久久综合| 少妇户外露出[11p]| 午夜av区久久| 天堂成人在线视频| 午夜精品一区二区三区在线视频 | 国产一区二区三区三区在线观看| a欧美人片人妖| 欧美在线播放一区二区| 日韩精品国产精品| 欧美精品日韩在线| 欧美性欧美巨大黑白大战| 成人77777| 国产一区二中文字幕在线看 | 日本韩国欧美在线观看| 99精品视频免费在线观看| 国产又大又黑又粗免费视频| 亚洲国产成人爱av在线播放| 9999在线视频| 精品国产乱码久久久久久108| 日韩午夜在线| 国产aⅴ激情无码久久久无码| 欧美四级电影在线观看| 麻豆最新免费在线视频| 不卡日韩av| 亚洲毛片一区| 亚洲AV无码片久久精品| 欧美性大战久久久| 久草免费在线| 国模一区二区三区私拍视频| 免费视频一区| 成人激情五月天| 欧美精品电影在线播放| 欧美videos另类精品| 久久亚裔精品欧美| 久久精品国产免费| 久草福利资源在线观看| 亚洲精品国产精品国产自| 国产综合色区在线观看| 宅男噜噜99国产精品观看免费| 国产盗摄女厕一区二区三区| 久久国产精品系列| 最近2019年中文视频免费在线观看| 国产乱码精品一区二区三区亚洲人| 国产免费一区二区视频| 国产婷婷色一区二区三区| av加勒比在线| 欧美孕妇性xx| 久久精品亚洲人成影院| 久久久老熟女一区二区三区91| 在线亚洲人成电影网站色www| 国产一二三区在线观看| 久久久一本精品99久久精品| 久久精品国产亚洲aⅴ| 日韩精品视频免费播放| 色综合亚洲精品激情狠狠| 成午夜精品一区二区三区软件| 日本熟妇人妻xxxxx| 亚洲精品视频在线观看免费| 青草久久伊人| caoporen国产精品| 日本不卡一二三区黄网| 日本三级网站在线观看| 精品国产自在精品国产浪潮| 亚洲精品无吗| 97中文字幕在线观看|