题解 | #寻找第K大#

寻找第K大

https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

function findKth(a, n, K) {
    function quickSelect(arr, left, right, K) {
        if (left === right) return arr[left];

        let pivotIndex = partition(arr, left, right);

        if (K === pivotIndex) {
            return arr[K];
        } else if (K < pivotIndex) {
            return quickSelect(arr, left, pivotIndex - 1, K);
        } else {
            return quickSelect(arr, pivotIndex + 1, right, K);
        }
    }

    function partition(arr, left, right) {
        let pivot = arr[right];
        let i = left;

        for (let j = left; j < right; j++) {
            if (arr[j] > pivot) {
                // 对于找第 K 大的元素,用大于号
                [arr[i], arr[j]] = [arr[j], arr[i]];
                i++;
            }
        }
        [arr[i], arr[right]] = [arr[right], arr[i]];
        return i;
    }

    return quickSelect(a, 0, n - 1, K - 1);
}
module.exports = {
    findKth: findKth,
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务