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