Advertisement
nikunjsoni

347

May 25th, 2021
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     vector<int> num;
  4.     unordered_map<int, int> freq;
  5.    
  6.     vector<int> topKFrequent(vector<int>& nums, int k) {
  7.         for(auto n: nums){
  8.             freq[n]++;
  9.             if(freq[n] == 1) num.push_back(n);
  10.         }
  11.         int kn = num.size()-k;
  12.         quickselect(0, num.size()-1, kn);
  13.         vector<int> ans;
  14.         while(k--){
  15.             ans.push_back(num.back());
  16.             num.pop_back();
  17.         }
  18.         return ans;
  19.     }
  20.    
  21.     void quickselect(int left, int right, int k){
  22.         if(left == right) return;
  23.         int pivot = partition(left, right);
  24.         if(k == pivot)
  25.             return;
  26.         else if(k < pivot)
  27.             quickselect(left, pivot-1, k);
  28.         else
  29.             quickselect(pivot+1, right, k);
  30.     }
  31.    
  32.     int partition(int left, int right){
  33.         int pivot = left;
  34.         while(left <= right){
  35.             while(left <= right && freq[num[left]] <= freq[num[pivot]])
  36.                 left++;
  37.             while(left <= right && freq[num[right]] > freq[num[pivot]])
  38.                 right--;
  39.             if(left < right)
  40.                 swap(num[left], num[right]);
  41.             else
  42.                 swap(num[pivot], num[right]);
  43.         }
  44.         return right;
  45.     }
  46.    
  47. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement