int kthlargest(vector<int>&nums,int k,int l,int r) { // cout<<l<<" "<<r<<" "<<k<<"\n"; if(k>0&&k<=r-l+1) { int pos=randompartition(nums,l,r); // cout<<pos<<"\n"; if(pos-l==k-1) return nums[pos]; if(pos-l>k-1) return kthlargest(nums,k,l,pos-1); return kthlargest(nums,k-pos+l-1,pos+1,r); } return INT_MAX; }
// Return pointer to the kth largest Node* kthlargest(Node* root, int &k) { if( root == NULL ) return NULL; else { Node* result = kthlargest(root->right, int k); if( result ) return result; k--; if( k == 0 ) return root; return kthlargest(root->left, k); } }
int findKthLargest(vector<int>& nums, int k) { //to find kth smallest change nums.size()-k+1===>k int ans=kthlargest(nums,nums.size()-k+1,0,nums.size()); return ans; }