Advertisement
imashutosh51

K’th largest element in a stream

Aug 5th, 2022 (edited)
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. /* Brute Force */
  2. class KthLargest {
  3.     int k;
  4.     vector <int> arr;
  5.     int _size;
  6. public:
  7.     KthLargest(int k, vector<int>& nums) {
  8.         this->k=k;
  9.         sort(nums.begin(),nums.end(),greater<int>());
  10.         for(auto itr:nums) arr.push_back(itr);
  11.         _size=nums.size();
  12.     }
  13.    
  14.     int add(int val) {
  15.         arr.push_back(val);
  16.         _size++;
  17.         int i=_size-1;
  18.         while(i>0 && arr[i]>arr[i-1]){
  19.             swap(arr[i],arr[i-1]);
  20.             i--;
  21.         }
  22.         return arr[k-1];
  23.     }
  24. };
  25.  
  26. /*
  27. Logic:
  28. take a min heap and push the element if size of min heap is less than k.
  29. if min heap size is k so,kth maxium element will be at top of min heap
  30. so if current element is smaller than top of min heap then it will not
  31. contribute in kth maximum element else pop top element and push current
  32. element at top.
  33. every time kth maxiumum element will be at top if min heap size is k
  34. */
  35. class Solution {
  36.   public:
  37.     vector<int> kthLargest(int k, int arr[], int n) {
  38.         priority_queue<int,vector<int>,greater<int>> q;
  39.         vector <int> res;
  40.         for(int i=0;i<n;i++){
  41.             if(q.size()<k){q.push(arr[i]);}
  42.             else if(q.top()<arr[i]){
  43.                 q.pop();
  44.                 q.push(arr[i]);
  45.             }
  46.             if(q.size()<k) res.push_back(-1);
  47.             else res.push_back(q.top());
  48.         }
  49.         return res;
  50.     }
  51. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement