Leetcode 347. Top K Frequent Elements

来源:互联网 发布:linux c语言usleep 编辑:程序博客网 时间:2024/05/16 04:42

347. Top K Frequent Elements

Total Accepted: 33314 Total Submissions: 74992 Difficulty: Medium

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.

Hide Company Tags
 Pocket Gems Yelp
Hide Tags
 Hash Table Heap
Hide Similar Problems
 (M) Word Frequency (M) Kth Largest Element in an Array

思路:

先存入hashmap,去重(计数)。

然后需要以value排序,并且有相应的key-value对应关系。这里博主自己新建了一个class。用maxheap保证顺序,取出这个class的object然后输出key即可。

public class Solution { // 40ms    public List<Integer> topKFrequent(int[] nums, int k) {        Map<Integer, Integer> map = new HashMap<Integer, Integer>();        List<Integer> res = new ArrayList<Integer>();        PriorityQueue<myPair> pq = new PriorityQueue<myPair>(new Comparator<myPair>(){            public int compare(myPair i1, myPair i2){ // Integer not int                return i2.value - i1.value;            }        });                for(int n : nums){            if(!map.containsKey(n)){                map.put(n, 1);            }else{                map.put(n, map.get(n)+1);            }        }                for(int n:nums){            if(!map.containsKey(n)) continue;            pq.offer(new myPair(n, map.get(n)));            map.remove(n);        }                for(int i=k; i>0; i--){            res.add(pq.poll().key);        }        return res;    }        class myPair{        int key;        int value;                public myPair(int k, int v){            this.key = k;            this.value = v;        }    }}


0 0
原创粉丝点击