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

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

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.

 to see which companies asked this question

 

Solution:

1.使用hashtable获取每个元素出现的次数

2.使用小根堆heap排序(priority queue实现),获取前K个出现次数最多的元素pair

3.输出,注意是小根堆,要reverse一下

时间复杂度:O(N * logK)

1 class CompareDist 2 { 3 public: 4     bool operator()(pair
n1, pair
n2) 5 { 6 return n1.second > n2.second; 7 } 8 }; 9 10 class Solution {11 public:12 vector
topKFrequent(vector
& nums, int k) 13 {14 vector
ret;15 unordered_map
htable;16 17 for (int key : nums) // get each key appears times18 htable[key]++;19 20 priority_queue
, vector
>, CompareDist> sheap; // use min heap to get k biggest21 for (auto elem : htable)22 {23 if (sheap.size() < k)24 {25 sheap.push(elem);26 }27 else28 {29 pair
heap_min = sheap.top();30 if (elem.second > heap_min.second)31 {32 sheap.pop();33 sheap.push(elem);34 }35 }36 }37 38 while (!sheap.empty())39 {40 pair
heap_min = sheap.top();41 ret.push_back(heap_min.first);42 sheap.pop();43 }44 reverse(ret.begin(), ret.end());45 46 return ret;47 }48 };

 

或者直接使用make_heap操作,时间复杂度O(N + KlogN) = O(N)

1 vector
topKFrequent(vector
& nums, int k) 2 { 3 unordered_map
htable; 4 for (auto &n : nums) 5 htable[n]++; 6 7 vector
> heap; 8 for (auto &i : htable) 9 heap.push_back({i.second, i.first});10 11 vector
result;12 make_heap(heap.begin(), heap.end());13 while (k--) 14 {15 result.push_back(heap.front().second);16 pop_heap(heap.begin(), heap.end());17 heap.pop_back();18 }19 return result;20 }

 

转载于:https://www.cnblogs.com/ym65536/p/5537052.html

你可能感兴趣的文章
【坑】linux目录软连接的相关操作--很容易误操作
查看>>
Phpstorm中使用SFTP
查看>>
stm32中字节对齐问题(__align(n),__packed用法)
查看>>
like tp
查看>>
分布式系统事务一致性解决方案
查看>>
开启一个项目如何上传到git
查看>>
ie文本框内容不居中问题
查看>>
利用grub2制作多启动U盘
查看>>
MQTT的学习研究(十三) IBM MQTTV3 简单发布订阅实例
查看>>
使用 github Pages 服务建立个人独立博客全过程
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
spring-使用MyEcilpse创建demo
查看>>
JavaScript -- 数据存储
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
scrapy-加蘑菇代理
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>