博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 347. Top K Frequent Elements
阅读量:5291 次
发布时间:2019-06-14

本文共 1628 字,大约阅读时间需要 5 分钟。

347. Top K Frequent Elements

  • Total Accepted: 26456
  • Total Submissions: 60329
  • Difficulty: Medium

 

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].

Note: 

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

 

 

思路:最好的是桶排序,牺牲了内存,加快了速度。总的来说,可以有O(n)和O(nlog(n-k))两种做法。

 

代码:

O(n)的做法:

1 class Solution { 2 public: 3     vector
topKFrequent(vector
& nums, int k) { 4 unordered_map
um; 5 for(int num:nums){ 6 um[num]++; 7 } 8 vector
> bucket(nums.size()+1); 9 for(auto p:um){10 bucket[p.second].push_back(p.first);11 }12 vector
res;13 for(int i=bucket.size()-1;i>=0&&res.size()

 

O(nlog(n-k))的做法:

1 class Solution { 2 public: 3     vector
topKFrequent(vector
& nums, int k) { 4 unordered_map
um; 5 for(int num:nums){ 6 um[num]++; 7 } 8 vector
res; 9 priority_queue
> pq;10 for(auto it=um.begin();it!=um.end();it++){11 pq.push(make_pair(it->second,it->first));12 if(pq.size()>um.size()-k){ //抽屉原理13 res.push_back(pq.top().second);14 pq.pop();15 }16 }17 return res;18 }19 };

 

11号到22号,杂七杂八的事情有些多,耽搁了一段时间。

转载于:https://www.cnblogs.com/Deribs4/p/5794254.html

你可能感兴趣的文章
(转)MSDN Library “已取消到该网页的导航”解决办法
查看>>
iOS-加载html字符串
查看>>
Shell 数组
查看>>
JavaStrip和python的变量存储位置
查看>>
【T_SQL】 基础 续
查看>>
cmd命令安装、卸载、启动和停止Windows Servic
查看>>
lightoj--1245--Harmonic Number (II)(数学推导)
查看>>
poj 1149 pigs ---- 最大流
查看>>
Swift中字符串转化为Class的方法
查看>>
使用RockMongo管理MongoDB
查看>>
20140213-想念是while里的死循环
查看>>
C语言运算符及其优先级汇总表口诀
查看>>
深入理解HTTP Session
查看>>
【转载】uclibc和glibc的差别
查看>>
搭建《深入Linux内核架构》的Linux环境
查看>>
Yuchuan_Linux_C 编程之三 静态库的制作和使用
查看>>
C#的最实用的的字符串加密解密方法大全
查看>>
前台通过window.localStorage存储用户名
查看>>
基于Flutter实现的仿开眼视频App
查看>>
析构器
查看>>