本文主要是介绍力扣hot100 数组中的第K个最大元素 堆 三路划分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Problem: 215. 数组中的第K个最大元素
文章目录
- 思路
- 复杂度
- Code
思路
👨🏫 参考
复杂度
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( log n ) O(\log{n}) O(logn)
Code
class Solution {public int findKthLargest(int[] nums, int k){List<Integer> list = new ArrayList<>();for (int x : nums)list.add(x);return quickSelect(list, k);}private int quickSelect(List<Integer> nums, int k){Random rand = new Random();int pivot = nums.get(rand.nextInt(nums.size()));List<Integer> big = new ArrayList<>();List<Integer> equal = new ArrayList<>();List<Integer> small = new ArrayList<>();for (int x : nums){if (x < pivot)small.add(x);else if (x == pivot)equal.add(x);elsebig.add(x);}if (k <= big.size())// 第 k 大在 big中return quickSelect(big, k);else if (big.size() + equal.size() < k)// 第 k 大在 small中return quickSelect(small, k - big.size() - equal.size());return pivot;// 当前选到的值就是第 k 大}
}
这篇关于力扣hot100 数组中的第K个最大元素 堆 三路划分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!