215. 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2 输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
解题思路:快速排序,根据寻找的只找一个区间
int partition(int* nums,int l,int r){ int i=l-1; int x=nums[r]; for(int j=l;j<r;j++){ if(nums[j]<x){ int t=nums[++i]; nums[i]=nums[j]; nums[j]=t; } } int t=nums[i+1]; nums[i+1]=nums[r]; nums[r]=t; return i+1; } int quickSort(int* nums,int l,int r,int index){ int pos=partition(nums,l,r); if(pos==index){ return nums[pos]; }else{ return pos<index?quickSort(nums,pos+1,r,index):quickSort(nums,l,pos-1,index); } } int findKthLargest(int* nums, int numsSize, int k){ return quickSort(nums,0,numsSize-1,numsSize-k); }
立志如山 静心求实