Leetcode_347_Top K Frequent Elements
Posted 皮斯特劳沃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode_347_Top K Frequent Elements相关的知识,希望对你有一定的参考价值。
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)该题为给定数组及正数k,求出数组中元素出现次数在前k的元素的集合。
(2)考虑将元素及其出现次数存入到map中,构建桶排序,将元素出现的次数作为数组下标,将元素集合作为值存入到数组中,对数组从右至左进行遍历,将取得的值加入结果集,如果结果集元素个数大于k,则返回结果集。
(3)代码实现如下所示。希望对你有所帮助。
package leetcode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Top_K_Frequent_Elements
public List<Integer> topKFrequent(int[] nums, int k)
if (nums == null)
return null;
Map<Integer, Integer> maps = new HashMap<Integer, Integer>();
// 将元素及其出现的次数存入map中
for (Integer x : nums)
if (maps.containsKey(x))
maps.put(x, maps.get(x) + 1);
else
maps.put(x, 1);
// 构建桶排序,以次数为下标,次数对应元素为值存入到数组中
List<Integer>[] tmpArr = new List[nums.length + 1];
for (int x : maps.keySet())
int count = maps.get(x);
if (tmpArr[count] == null)
List<Integer> list = new ArrayList<>();
list.add(x);
tmpArr[count] = list;
else
tmpArr[count].add(x);
List<Integer> result = new ArrayList<Integer>();
// 对数组从右至左进行遍历,将元素加入结果集合,如果结果集大于k值,则返回结果集
for (int i = tmpArr.length - 1; i >= 0 && result.size() < k; i--)
if (tmpArr[i] != null)
result.addAll(tmpArr[i]);
return result;
以上是关于Leetcode_347_Top K Frequent Elements的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 347. Top K Frequent Elements
[leetcode]347. Top K Frequent Elements
#Leetcode# 347. Top K Frequent Elements
Leetcode 347: Top K Frequent Elements