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

66 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、题目描述:

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/kt…

二、思路分析:

利用快排,每次划分k所在的范围即可。时间复杂度O(n),空间O(lgn)

三、AC 代码:

 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
     k=nums.length-k;
    return find(0,nums.length-1);
    function find(start,end){
        let index=quick(start,end);
        if(index===k) return nums[k];
        if(index>k) return find(start,index-1);
        else return find(index+1,end);
    }
    function quick(start,end){
        let t=nums[start];
        let i=start,j=end;
        while(i<j){
            while(i<j&&nums[j]>=t) j--;
            [nums[i],nums[j]]=[nums[j],nums[i]];
            while(i<j&&nums[i]<=t) i++;
            [nums[i],nums[j]]=[nums[j],nums[i]];
        }
        return i;
    }
};

四、总结:

快排题,不难