Top k Largest Numbers
Posted YuriFLAG
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Top k Largest Numbers相关的知识,希望对你有一定的参考价值。
Given an integer array, find the top k largest numbers in it.
Example
Given [3,10,1000,-99,4,100]
and k = 3
.
Return [1000, 100, 10]
.
思路:由于需要按从大到小的顺序,因此直接用PriorityQueue即可,用Partition的方法的话还需要排序。直接用PriorityQueue 写的代码量少。
1 class Solution { 2 /* 3 * @param nums an integer array 4 * @param k an integer 5 * @return the top k largest numbers in array 6 */ 7 public int[] topk(int[] nums, int k) { 8 if (nums == null || nums.length < k) { 9 return null; 10 } 11 12 int[] result = new int[k]; 13 PriorityQueue<Integer> minHeap = new PriorityQueue<>(); 14 for (int i = 0; i < nums.length; i++) { 15 if (minHeap.size() < k) { 16 minHeap.add(nums[i]); 17 } else { 18 int temp = minHeap.poll(); 19 minHeap.add(Math.max(temp, nums[i])); 20 } 21 } 22 23 for (int i = k - 1; i >= 0; i--) { 24 result[i] = minHeap.poll(); 25 } 26 27 return result; 28 } 29 };
以上是关于Top k Largest Numbers的主要内容,如果未能解决你的问题,请参考以下文章
[kuangbin]数学训练一K - Largest Box 霖行
215 Kth Largest Element in an Array 数组中的第K个最大元素
POJ2985 The k-th Largest Group[树状数组求第k大值 并查集]
POJ2985 The k-th Largest Group