All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0301_0400.s0347_top_k_frequent_elements.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0301_0400.s0347_top_k_frequent_elements;

// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #Array #Hash_Table #Sorting
// #Heap_Priority_Queue #Counting #Divide_and_Conquer #Quickselect #Bucket_Sort
// #Data_Structure_II_Day_20_Heap_Priority_Queue #Big_O_Time_O(n*log(n))_Space_O(k)
// #2022_07_11_Time_9_ms_(97.93%)_Space_48.5_MB_(83.34%)

import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Queue;

/**
 * 347 - Top K Frequent Elements\.
 *
 * Medium
 *
 * Given an integer array `nums` and an integer `k`, return _the_ `k` _most frequent elements_. You may return the answer in **any order**.
 *
 * **Example 1:**
 *
 * **Input:** nums = [1,1,1,2,2,3], k = 2
 *
 * **Output:** [1,2]
 *
 * **Example 2:**
 *
 * **Input:** nums = [1], k = 1
 *
 * **Output:** [1]
 *
 * **Constraints:**
 *
 * *   1 <= nums.length <= 105
 * *   `k` is in the range `[1, the number of unique elements in the array]`.
 * *   It is **guaranteed** that the answer is **unique**.
 *
 * **Follow up:** Your algorithm's time complexity must be better than `O(n log n)`, where n is the array's size.
**/
public class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Arrays.sort(nums);
        // Min heap of 
        Queue queue = new PriorityQueue<>(k + 1, (a, b) -> (a[1] - b[1]));
        // Filter with min heap
        int j = 0;
        for (int i = 0; i <= nums.length; i++) {
            if (i == nums.length || nums[i] != nums[j]) {
                queue.offer(new int[] {nums[j], i - j});
                if (queue.size() > k) {
                    queue.poll();
                }
                j = i;
            }
        }
        // Convert to int array
        int[] result = new int[k];
        for (int i = k - 1; i >= 0; i--) {
            result[i] = queue.poll()[0];
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy