题目
题解
代码
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var findKthLargest = function(nums, k) {
let targetIndex = nums.length - k ;
let l = 0;
let r = nums.length - 1;
while(l < r) {
// 拿到快速排序函数返回当前的索引值,
// 判断该索引在目标值的那一边
let mid = quickSelect(nums, l, r);
if(mid == targetIndex) {
return nums[mid];
} else if (mid < targetIndex) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return nums[l]
};
function quickSelect(nums, l, r) {
let left = l;
let right = r;
let pivot = nums[l];
while(left < right) {
// 当右值大于比较值
while(left < right && nums[right] >= pivot) {
right --;
}
// 右值小与比较值
nums[left] = nums[right];
// 当左值小与比较值
while( left < right && nums[left] <= pivot) {
left++;
}
// 当左值大于比较值
nums[right] = nums[left];
}
// 将比较值放到中间位置
nums[left] = pivot;
// 将其索引返回
return left;
}