Untitled
import java.util.*; public class TopKFrequentElements { public int[] topKFrequent(int[] nums, int k) { // Step 1: Build a frequency map Map<Integer, Integer> frequencyMap = new HashMap<>(); for (int num : nums) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } // Step 2: Use a min-heap to keep track of top k frequent elements PriorityQueue<int[]> minHeap = new PriorityQueue<>((a, b) -> a[1] - b[1]); // Compare by frequency for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) { minHeap.offer(new int[]{entry.getKey(), entry.getValue()}); if (minHeap.size() > k) { minHeap.poll(); // Remove the least frequent element } } // Step 3: Extract elements from the heap int[] result = new int[k]; int index = 0; while (!minHeap.isEmpty()) { result[index++] = minHeap.poll()[0]; } return result; } public static void main(String[] args) { TopKFrequentElements solution = new TopKFrequentElements(); // Example 1 int[] nums1 = {1, 1, 1, 2, 2, 3}; int k1 = 2; System.out.println(Arrays.toString(solution.topKFrequent(nums1, k1))); // Output: [1, 2] // Example 2 int[] nums2 = {1}; int k2 = 1; System.out.println(Arrays.toString(solution.topKFrequent(nums2, k2))); // Output: [1] } }
Leave a Comment