leetcode地址:leetcode.cn/problems/xx…
只寻找数组中第k大的数字,可以考虑使用快速排序的思想,每一次快排周期结束时,flg位如果插入到第N位,那其一定是第N大的数字,循环这个过程,直至找到需要放置在第K位的flg值,就是我们所求的答案。
class Solution {
public int findKthLargest(int[] nums, int k) {
quickSort(nums, k - 1, 0, nums.length - 1);
return nums[k - 1];
}
public void quickSort(int[] nums, int k, int beg, int end) {
if (beg == end) return;
int tem = nums[beg];
int lef = beg + 1;
int rig = end;
while (lef < rig) {
while (lef < rig && nums[lef] >= tem) lef++;
while (lef < rig && nums[rig] < tem) rig--;
if (lef < rig) swap(nums, lef, rig);
}
if (nums[lef] < tem) lef--;
swap(nums, lef, beg);
if (lef == k) return;
if (lef < k) quickSort(nums, k, lef + 1, end);
else quickSort(nums, k, beg, lef - 1);
}
public void swap(int[] nums, int i, int j) {
int tem = nums[i];
nums[i] = nums[j];
nums[j] = tem;
}
}