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);
else
big.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 大
}
}