Heap(medium两道题)

215. Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the
kth largest element in the sorted order, not the kth distinct element.
在这里插入图片描述
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.

https://leetcode.com/problems/kth-largest-element-in-an-array/discuss/60294/Solution-explained

347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.
在这里插入图片描述
Note:

  1. You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  2. Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.

Java O(n) Solution - Bucket Sort:

Idea is simple. Build a array of list to be buckets with length 1 to sort.

class Solution {
    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;
    }
}

猜你喜欢

转载自blog.csdn.net/xw_Summer/article/details/86619104