lc_top_0925
lc215 数组中的第k个最大大元素
快排解法
class Solution {
public int findKthLargest(int[] nums, int k) {
return findKthLargest(nums, k-1, 0, nums.length-1);
}
public int findKthLargest(int[] nums, int k, int left, int right) {
int p = partition(nums, left, right);
if (p == k) {
return nums[p];
} else if (p > k) {
return findKthLargest(nums, k, left, p-1);
} else {
return findKthLargest(nums, k, p+1, right);
}
}
private int partition(int[] nums, int left, int right) {
int p = nums[left];
int l = left;
int r = right;
while (l < r) {
while (l < r && nums[r] < p) {
r--;
}
while (l < r && nums[l] >= p) {
l++;
}
if (l < r) {
int t = nums[r];
nums[r] = nums[l];
nums[l] = t;
}
}
nums[left] = nums[r];
nums[r] = p;
return r;
}
}
完全基于快速排序的思路,执行patition函数进行“二分”,只是相当于修改了快排的主函数
快排思路见-->快排
堆排序解法
// todo

浙公网安备 33010602011771号