215. Kth Largest Element in an Array 第K大元素

92 阅读1分钟

215. Kth Largest Element in an Array

难度中等1907

\

解题思路

1.快速排序 选定 pivot元素,每次 partition 分割的时候 i j 两个元素 i = start j = i + 1 每当遇到 比pivot 元素小的元素时, 移动 i 2.交换 swap(arr,i,j) 每次小的时候, 最后需要执行 swap(arr, i ,start) 3.返回 i , 如果 i === arr.length - k 的话则说明遇到了第 k 大的元素

代码

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function (nums, k) {
    let target
    const swap = (arr, i, j) => {
        [arr[i], arr[j]] = [arr[j], arr[i]]
    }
    const partition = (arr, start, end) => {
        const pivot = arr[start]
        let i = start
        for (let j = i + 1; j < end; j++) {
            if (arr[j] < pivot) {
                i++
                swap(arr, i, j)
            }
        }
        swap(arr, start, i)
        return i

    }
    function quickSort(arr, start, end) {
        if (start < end) {
            const p = partition(arr, start, end)
            if (p === arr.length - k) {
                target = arr[p]
                return
            }
            quickSort(arr, start, p)
            quickSort(arr, p + 1, end)
        }
    }
    quickSort(nums, 0, nums.length, k)

    return target
};