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;
}
};
四、总结:
快排题,不难