LeetCode347:前K个高频元素

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

例如,

给定数组 [1,1,1,2,2,3] , 和 k = 2,返回 [1,2]。

注意:

你可以假设给定的 k 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

解题思路:
采用map存储每个元素出现的次数。
然后按照键值对的value逆序排序。
取前k个值。

class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        List<Integer> res = new ArrayList<>();
        Map<Integer,Integer> map = new TreeMap<>();
        for(int i = 0;i<nums.length;i++){
            if(map.containsKey(nums[i])){
               map.put(nums[i],map.get(nums[i]).intValue()+1);
            }else{
                map.put(nums[i],1);
            }
        }
        List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
        //然后通过比较器来实现排序
        Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {
            //降序
            public int compare(Map.Entry<Integer, Integer> o1,
                               Map.Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }

        });
        for(Map.Entry<Integer,Integer> mapping:list){
            res.add(mapping.getKey());
            if(res.size()==k){
                break;
            }
        }
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/u012485480/article/details/80803485