g0301_0400.s0347_top_k_frequent_elements.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
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