• leetcode : 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

    难度: medium

    tag : hashmap   heap sort (data structure: priority queue)

    步骤:

    1. 一次遍历,用户hashmap存储出现的数及对应的次数

    2. 写一个PriorityQueue比较Map.Entry

    3. 把top k Map.Entry入列

    4. 把top k Map.Entry.getKey() 放入ArrayList 中

    public class Solution {
        public List<Integer> topKFrequent(int[] nums, int k) {
            
            //1.  iterator all the distinct elements and count
            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
            for(int i = 0; i < nums.length; i++) {
                if(!map.containsKey(nums[i])) {
                    map.put(nums[i], 1);
                } else {
                    map.put(nums[i], map.get(nums[i]) + 1);
                }
            }
            
            //2. heap sort 
            PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<Map.Entry<Integer, Integer>>(
                new Comparator<Map.Entry<Integer, Integer>>(){
                    public int compare(Map.Entry<Integer, Integer> entry1, Map.Entry<Integer, Integer> entry2) {
                        return entry1.getValue() - entry2.getValue();
                    }
                });
                
            //3. top K entry
            for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
                if(queue.size() < k) {
                    queue.offer(entry);
                } else if(queue.peek().getValue() < entry.getValue()) {
                    queue.poll();
                    queue.offer(entry);
                }
            }
            
            //4. top k entry.key 
            
            List<Integer> answer = new ArrayList<Integer>();
            for(Map.Entry<Integer, Integer> entry : queue) {
                answer.add(entry.getKey());
            }
            
            return answer;
            
        }
    }
  • 相关阅读:
    oracle 当行函数 日期
    veridata实验举例(1)验证TCUSTMER与TCUSTORD两节点同步情况
    sdut1730 数字三角形问题(dp入门题)
    Android4.0 Design之UI设计易犯的错误2
    怎样提高团队管理能力6
    Effective C++ 29-33
    内存补齐序列一:关于内存对齐和填充
    【 D3.js 入门系列 --- 10.1 】 简化 GeoJSON 文件
    Android TrafficStats类的使用
    新手上路:Laravel-控制器基础
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6732642.html
Copyright © 2020-2023  润新知