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

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

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.

解题思路

  1. 用一个Map统计每个数字的出现频率。
  2. 依据出现频率对Map.Entry进行排序,排序算法为堆排序。
  3. 输出出现频率最高的k个元素。

实现代码

//Runtime: 43 mspublic class Solution {    private void buildHeap(ArrayList
> entries, int root, int len) { int left = 2 * root + 1; if (left < len) { int largest = left; int right = left + 1; if (right < len && entries.get(right).getValue() > entries.get(largest).getValue()) { largest = right; } if (entries.get(root).getValue() < entries.get(largest).getValue()) { Map.Entry
entry = entries.get(root); entries.set(root, entries.get(largest)); entries.set(largest, entry); buildHeap(entries, largest, len); } } } private void heapSort(ArrayList
> entries) { int len = entries.size(); for (int i = len / 2; i >= 0; i--) { buildHeap(entries, i, len); } for (int i = len - 1; i > 0; i--) { Map.Entry
entry = entries.get(0); entries.set(0, entries.get(i)); entries.set(i, entry); buildHeap(entries, 0, --len); } } public List
topKFrequent(int[] nums, int k) { Map
map = new HashMap
(); for (int num : nums) { if (map.containsKey(num)) { map.put(num, map.get(num) + 1); } else { map.put(num, 1); } } ArrayList
> entries = new ArrayList
>(map.entrySet()); heapSort(entries); List
list = new ArrayList
(k); for (int i = entries.size() - 1; i >= entries.size() - k; i--) { list.add(entries.get(i).getKey()); } return list; }}

转载地址:http://epenx.baihongyu.com/

你可能感兴趣的文章
一些感想
查看>>
SDL2 undefined reference to `SDL_Init' 问题
查看>>
蓝天集团董事长郎凤娥专访
查看>>
类成员与方法访问控制从严
查看>>
JSF是什么?它与Struts是什么关系?
查看>>
51 nod 1405 树的距离之和
查看>>
BZOJ 2733: [HNOI2012]永无乡
查看>>
spring 线程安全
查看>>
面试十大难题的样板回答
查看>>
梦断代码读后感(一)
查看>>
1489 蜥蜴和地下室
查看>>
Linux服务-bind
查看>>
SpringMVC系列(十六)Spring MVC与Struts2的对比
查看>>
20061008: IntelliJ Idea 6
查看>>
Android IOS WebRTC 音视频开发总结(四一)-- QQ和webrtc打洞能力pk
查看>>
Immediately register your GHD frizzy hair straightener concerning the GHD web page
查看>>
清除Xcode缓存
查看>>
Sharepoint2013:在页面上显示错误信息
查看>>
8-2测试总结
查看>>
SQLiteDatabase中query、insert、update、delete方法参数说明
查看>>