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);
}

 

posted on 2020-07-11 15:39  溪水静幽  阅读(65)  评论(0编辑  收藏  举报