/** * File: top_k.cs * Created Time: 2023-06-14 * Author: hpstory (hpstory1024@163.com) */ namespace hello_algo.chapter_heap; public class top_k { /* 基于堆查找数组中最大的 k 个元素 */ public static PriorityQueue topKHeap(int[] nums, int k) { PriorityQueue heap = new PriorityQueue(); // 将数组的前 k 个元素入堆 for (int i = 0; i < k; i++) { heap.Enqueue(nums[i], nums[i]); } // 从第 k+1 个元素开始,保持堆的长度为 k for (int i = k; i < nums.Length; i++) { // 若当前元素大于堆顶元素,则将堆顶元素出堆、当前元素入堆 if (nums[i] > heap.Peek()) { heap.Dequeue(); heap.Enqueue(nums[i], nums[i]); } } return heap; } [Test] public void Test() { int[] nums = { 1, 7, 6, 3, 2 }; int k = 3; PriorityQueue res = topKHeap(nums, k); Console.WriteLine("最大的 " + k + " 个元素为"); PrintUtil.PrintHeap(res); } }