?LeetCode刷題實戰(zhàn)215:數(shù)組中的第K個最大元素
Given an integer array nums and an integer k, return the kth largest element in the array.
Note that it is the kth largest element in the sorted order, not the kth distinct element.
題意
示例
示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
示例 2:
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
說明:
你可以假設(shè) k 總是有效的,且 1 ≤ k ≤ 數(shù)組的長度。
解題
利用快速排序,快速定位第k大的元素,具體可看代碼注釋
class Solution {
public int findKthLargest(int[] nums, int k) {
return find(nums, 0, nums.length-1, k);
}
int find(int[] nums, int s, int e, int k) {
// 設(shè)定flag,默認用nums[s]
int flag = nums[s];
int ss = s;
int ee = e;
while(ss<ee) {
// 從后向前找到第一個比flag大的數(shù)
while(ss<ee && nums[ee] <= flag)
ee--;
// 交換flag和比flag大的數(shù)
nums[ss] = nums[ee];
nums[ee] = flag;
// 從前向后找到第一個小于等于flag的數(shù)
while(ss<ee && nums[ss] > flag)
ss++;
// 交換flag和比flag小的數(shù)
nums[ee] = nums[ss];
nums[ss] = flag;
}
// 返回結(jié)果
if(ss + 1 == k)
return nums[ss];
// 找到的數(shù)比k小,更新s
else if(ss + 1 < k)
return find(nums, ss+1, e, k);
// 找到的數(shù)比k大,更新e
else
return find(nums, s, ss-1, k);
}
}
LeetCode刷題實戰(zhàn)201:數(shù)字范圍按位與
LeetCode刷題實戰(zhàn)202:快樂數(shù)
LeetCode刷題實戰(zhàn)204:計數(shù)質(zhì)數(shù)
LeetCode刷題實戰(zhàn)205:同構(gòu)字符串
LeetCode刷題實戰(zhàn)206:反轉(zhuǎn)鏈表
LeetCode刷題實戰(zhàn)208:實現(xiàn) Trie (前綴樹)
LeetCode刷題實戰(zhàn)209:長度最小的子數(shù)組
