难度:中等
https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
给定整数数组 nums
和整数 k
,请返回数组中第 k
个最大的元素。
请注意,你需要找的是数组排序后的第 k
个最大的元素,而不是第 k
个不同的元素。
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
/**
* 暴力解法
* @时间复杂度 O(NlogN) 空间复杂度 O(1)
* @param nums
* @param k
* @returns
*/
export function findKthLargest(nums: number[], k: number): number {
nums.sort((a, b) => b - a)
return nums[k - 1]
}
/**
* 快速排序
* @desc 时间复杂度 O(N) 空间复杂度 O(logN)
* @param nums
* @param k
* @returns
*/
export function findKthLargest2(nums: number[], k: number): number {
quickSort(nums, 0, nums.length - 1, k)
return nums[k - 1]
function quickSort(nums: number[], left: number, right: number, k: number) {
if (left < k && left < right) {
const partitonIndex = partition(nums, left, right)
quickSort(nums, left, partitonIndex - 1, k)
quickSort(nums, partitonIndex + 1, right, k)
}
}
function partition(nums: number[], left: number, right: number): number {
const pivot = left
let idx = pivot + 1
for (let i = idx; i <= right; i++) {
if (nums[i] > nums[pivot]) {
[nums[i], nums[idx]] = [nums[idx], nums[i]]
idx++
}
}
[nums[pivot], nums[idx - 1]] = [nums[idx - 1], nums[pivot]]
return idx - 1
}
}