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].

题目:意思很简单就是,找出数组中出现规定次数的元素

思路:细细深究后无果,还是决定用hashmap,大家有更好更高效的,多多赐教

public List<Integer> topKFrequent(int[] nums, int k) {

  List<Integer>[] bucket = new List[nums.length + 1];
  Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>();

  for (int n : nums) {
    frequencyMap.put(n, frequencyMap.getOrDefault(n, 0) + 1);
  }

  for (int key : frequencyMap.keySet()) {
    int frequency = frequencyMap.get(key);
    if (bucket[frequency] == null) {
    bucket[frequency] = new ArrayList<>();
  }
  bucket[frequency].add(key);
  }

  List<Integer> res = new ArrayList<>();

  for (int pos = bucket.length - 1; pos >= 0 && res.size() < k; pos--) {
    if (bucket[pos] != null) {
      res.addAll(bucket[pos]);
    }
  }
  return res;

}

注意一点,代码中标注的粗体方法是jdk8的新特性,jdk8以下老老实实的用代码实现吧,也不复杂,一眼就懂!

StayHungry 求知若渴 StayFoolish 放低姿态
原文地址:https://www.cnblogs.com/wujunjie/p/5687390.html