其他分享
首页 > 其他分享> > leetcode215.数组中的第K个最大元素

leetcode215.数组中的第K个最大元素

作者:互联网

leetcode215.数组中的第K个最大元素

题目

给定整数数组 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

求解

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
    let res = 0
    // 先排序后查找
    // nums.sort((a,b)=>{
    //     return b-a
    // })
    // return nums[k-1]
    //快速排序,找右侧第k个位置
    quicksort(0,nums.length-1,k)
    return res

    function quicksort(i,j,k){
        if(i>j||j<nums.length-k){
            return
        }
        if(k<=0){
            return
        }

        let origin_i=i
        let origin_j=j
        let tmp = nums[i]
        while(i<j){
            //右边指针向左移动,直到遇到小于tmp的,然后将其复值到i的位置
            while(i<j){
                if(nums[j]>=tmp){
                    j--
                }else{
                    nums[i]=nums[j]
                    break
                }
            }
            //左边指针向右移动,直到遇到大于tmp的,然后将其赋值到j的位置
            while(i<j){
                if(nums[i]<=tmp){
                    i++
                }else{
                    nums[j]=nums[i]
                    break
                }
            }
        }
        //i的位置就是tmp的位置
        nums[i]=tmp
        //如果i刚好时当前数组中倒数第k个
        if(i==nums.length-k){
            //那么他就是要求的值
            res = tmp
            return
        }
        //递归调用左右两边
        quicksort(origin_i,i-1,k)
        quicksort(i+1,origin_j,k)
    }
};

标签:return,nums,元素,number,数组,排序,leetcode215
来源: https://www.cnblogs.com/boniii/p/15647040.html