215. 数组中的第K个最大元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
private void swap(int[] nums, int a, int b) {
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
private int[] partition(int[] nums, int L, int R) {
int pivot = nums[L + (int) (Math.random() * (R - L + 1))];
int l = L - 1, r = R + 1, cur = L;
while (cur < r) {
if (nums[cur] == pivot) {
cur++;
} else if (nums[cur] > pivot) {
swap(nums, ++l, cur++);
} else {
swap(nums, --r, cur);
}
}
return new int[]{l + 1, r - 1};
}
private int solve(int[] nums, int k) {
int l = 0, r = nums.length - 1;
while (l < r) {
int[] partition = partition(nums, l, r);
if (k >= partition[0] && k <= partition[1]) {
return nums[k];
} else if (k < partition[0]) {
r = partition[0] - 1;
} else {
l = partition[1] + 1;
}
}
return nums[l];
}
public int findKthLargest(int[] nums, int k) {
return solve(nums, k - 1);
}
}
心之所向,素履以往 生如逆旅,一苇以航