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

LeetCode OJ 347. Top K Frequent Elements hashmap+排序求解

leetcode347 - Top K Frequent Elements - medium