leetcode215.陣列中的第K個最大元素
阿新 • • 發佈:2021-12-05
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) } };