1,问题简述
在未排序的数组中找到第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
2,示例
示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
3,题解思路
集合的使用
4,题解程序
import java.util.*;import java.util.stream.Collectors;public class FindKthLargestTest { public static void main(String[] args) { int[] array = {3, 2, 1, 5, 6, 4}; int k = 2; int kthLargest = findKthLargest(array, k); System.out.println("kthLargest = " + kthLargest); int kthLargest2 = findKthLargest2(array, k); System.out.println("kthLargest2 = " + kthLargest2); } public static int findKthLargest(int[] nums, int k) { if (nums == null || nums.length == 0 || nums.length < k) { return -1; } ArrayList arrayList = Arrays.stream(nums).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toCollection(ArrayList::new)); return arrayList.get(k - 1); } public static int findKthLargest2(int[] nums, int k) { if (nums == null || nums.length == 0 || nums.length < k) { return -1; } PriorityQueue priorityQueue = new PriorityQueue<>(k); for (Integer num : nums ) { if (priorityQueue.size() < k || num > priorityQueue.peek()) { priorityQueue.offer(num); } if (priorityQueue.size() > k) { priorityQueue.poll(); } } return priorityQueue.peek(); }}
5,题解程序图片版
6,总结
本题使用集合的方式进行解决,主要是熟悉一下java的方式,这里分享一下源码解析的文章吧java之ArrayList源码分析