[leetcode]347. Top K Frequent Elements

来源:互联网 发布:vb中chr是什么意思 编辑:程序博客网 时间:2024/05/18 07:38

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.
循规蹈矩的方法:
public class Solution {    public List<Integer> topKFrequent(int[] nums, int k) {        List<Integer> res = new ArrayList<Integer>();        Map<Integer,Integer> map = new HashMap<Integer,Integer>();        //generate map        for(int i=0; i<nums.length; i++){            if(map.containsKey(nums[i])){                map.put(nums[i],map.get(nums[i])+1);            }            else{                map.put(nums[i],1);            }        }        //sort by value        List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());          Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {              @Override              public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {                  //return o1.getValue().compareTo(o2.getValue());                  return o2.getValue().compareTo(o1.getValue());              }          });          //output the result        for (int i=0; i<k; i++) {              res.add(list.get(i).getKey());        }        return res;    }}


0 0