215. 数组中的第K个最大元素
LeetCode刷题打卡第016天 (第1篇) 20210725
思路:
- 运用快速排序
- 同时结合二分法
代码
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
//第k大,代表找出第k大的数
//运用快速排序,排除较大的值
//运用二分法,当小于的时候则取右半段,否则取左半端,
int left=0,right=nums.size()-1;
int target=right-k+1; //第k大的数的下标
while(left<right){
int mid=quickSelection(nums,left,right);
if(target==mid) return nums[mid];
else if(target>mid){
left=mid+1; //当返回的序号小于需要求的时,取右半边
}
else{
right=mid-1;
}
}
return nums[left];
}
inline int quickSelection(vector<int> &nums,int left,int right){//左右为闭区间
int p=nums[left];
while(left<right){
while(left<right && nums[right]>=p) right--;
nums[left]=nums[right];
while(left<right && nums[left]<=p) left++;
nums[right]=nums[left];
}
nums[left]=p;
return left;
}
};