| 4 | import java.util.*; |
| 5 | |
| 6 | public class TopKElements { |
| 7 | |
| 8 | /* |
| 9 | * ********** K Largest Elements ********** |
| 10 | */ |
| 11 | |
| 12 | public int[] kLargestElementsSortingAppraoch(int[] nums, int k) { |
| 13 | // Step 1: Sort the array in descending order |
| 14 | Integer[] numsArray = Arrays.stream(nums).boxed().toArray(Integer[]::new); |
| 15 | Arrays.sort(numsArray, Collections.reverseOrder()); |
| 16 | |
| 17 | // Step 2: Extract the first K elements |
| 18 | int[] result = new int[k]; |
| 19 | for (int i = 0; i < k; i++) { |
| 20 | result[i] = numsArray[i]; |
| 21 | } |
| 22 | return result; |
| 23 | } |
| 24 | |
| 25 | public int[] kLargestElementsMaxHeapAppraoch(int[] nums, int k) { |
| 26 | // Max heap |
| 27 | PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); |
| 28 | |
| 29 | // Add all numbers to the max heap |
| 30 | for (int num : nums) { |
| 31 | maxHeap.add(num); |
| 32 | } |
| 33 | |
| 34 | // Extract the top K largest elements |
| 35 | int[] result = new int[k]; |
| 36 | for (int i = 0; i < k; i++) { |
| 37 | result[i] = maxHeap.poll(); // Extracts the largest element |
| 38 | } |
| 39 | return result; |
| 40 | } |
| 41 | |
| 42 | public int[] kLargestElementsMinHeapAppraoch(int[] nums, int k) { |
| 43 | // Min heap |
| 44 | PriorityQueue<Integer> minHeap = new PriorityQueue<>(); |
| 45 | |
| 46 | // Add first K elements into the min heap |
| 47 | for(int i = 0; i < k; i++) { |
| 48 | minHeap.add(nums[i]); |
| 49 | } |
| 50 | |
| 51 | // Process the remaining elements |
| 52 | for (int i = k; i < nums.length; i++) { |
| 53 | minHeap.add(nums[i]); |
| 54 | if (minHeap.size() > k) { |
| 55 | minHeap.poll(); |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | // Extract the top K largest elements from the min heap |
| 60 | int[] result = new int[k]; |
| 61 | for (int i = 0; i < k; i++) { |
| 62 | result[i] = minHeap.poll(); |
| 63 | } |
nothing calls this directly
no outgoing calls
no test coverage detected