【215. 数组中的第K个最大元素】

目录

  • 一、题目描述
  • 二、算法原理
  • 三、代码实现

一、题目描述

【215. 数组中的第K个最大元素】_第1张图片

二、算法原理

【215. 数组中的第K个最大元素】_第2张图片

三、代码实现

class Solution {
public:
    int getRandom(int left,int right,vector<int>& nums)
    {
        return nums[rand()%(right-left+1)+left];
    }

    int qsort(int l,int r,vector<int>& nums,int k)
    {
        if(i==r)
        {
            return nums[l];
        }
        int key=getRandom(l,r,nums);
        int i=l,left=l-1,right=r+1;
        while(i<right)
        {
            if(nums[i]<key)
                swap(nums[++left],nums[i++]);
            else if(nums[i]>key)
                swap(nums[i],nums[--right]);
            else
                i++;
        }
        int c=r-right+1,b=right-left-1,a=left-l+1;
        if(c>=k)
        {
            return qsort(right,r,nums,k);
        }
        else if(b+c>=k)
            return key;
        else
        {
            return qsort(l,left,nums,k-b-c);
        }
    }

    int findKthLargest(vector<int>& nums, int k) 
    {
        srand(time(NULL));
        return qsort(0,nums.size()-1,nums,k);     
    }
};

你可能感兴趣的:(算法,leetcode,数据结构)