| 
 | 1 | +// Source : https://leetcode.com/problems/top-k-frequent-elements/  | 
 | 2 | +// Author : Calinescu Valentin  | 
 | 3 | +// Date   : 2016-05-02  | 
 | 4 | + | 
 | 5 | +/***************************************************************************************   | 
 | 6 | + *  | 
 | 7 | + * Given a non-empty array of integers, return the k most frequent elements.  | 
 | 8 | + *   | 
 | 9 | + * For example,  | 
 | 10 | + * Given [1,1,1,2,2,3] and k = 2, return [1,2].  | 
 | 11 | + *   | 
 | 12 | + * Note:   | 
 | 13 | + * You may assume k is always valid, 1 ≤ k ≤ number of unique elements.  | 
 | 14 | + * Your algorithm's time complexity must be better than O(n log n), where n is the   | 
 | 15 | + * array's size.  | 
 | 16 | + *   | 
 | 17 | + ***************************************************************************************/  | 
 | 18 | + | 
 | 19 | +class Solution {  | 
 | 20 | +public:  | 
 | 21 | +    struct element//structure consisting of every distinct number in the vector,  | 
 | 22 | +    //along with its frequency  | 
 | 23 | +    {  | 
 | 24 | +        int number, frequency;  | 
 | 25 | +        bool operator < (const element arg) const  | 
 | 26 | +        {  | 
 | 27 | +            return frequency < arg.frequency;  | 
 | 28 | +        }  | 
 | 29 | +    };  | 
 | 30 | +    priority_queue <element> sol;//we use a heap so we have all of the elements sorted  | 
 | 31 | +    //by their frequency  | 
 | 32 | +    vector <int> solution;  | 
 | 33 | +      | 
 | 34 | +    vector<int> topKFrequent(vector<int>& nums, int k) {  | 
 | 35 | +        sort(nums.begin(), nums.end());  | 
 | 36 | +        int i = 1;  | 
 | 37 | +        for(; i < nums.size(); i++)  | 
 | 38 | +        {  | 
 | 39 | +            int freq = 1;  | 
 | 40 | +            while(i < nums.size() && nums[i] == nums[i - 1])  | 
 | 41 | +            {  | 
 | 42 | +                i++;  | 
 | 43 | +                freq++;  | 
 | 44 | +            }  | 
 | 45 | +            element el;  | 
 | 46 | +            el.number = nums[i - 1];  | 
 | 47 | +            el.frequency = freq;  | 
 | 48 | +            sol.push(el);  | 
 | 49 | +        }  | 
 | 50 | +        if(i == nums.size())//if we have 1 distinct element as the last  | 
 | 51 | +        {  | 
 | 52 | +            element el;  | 
 | 53 | +            el.number = nums[nums.size() - 1];  | 
 | 54 | +            el.frequency = 1;  | 
 | 55 | +            sol.push(el);  | 
 | 56 | +        }  | 
 | 57 | +        while(k)//we extract the first k elements from the heap  | 
 | 58 | +        {  | 
 | 59 | +            solution.push_back(sol.top().number);  | 
 | 60 | +            sol.pop();  | 
 | 61 | +            k--;  | 
 | 62 | +        }  | 
 | 63 | +        return solution;  | 
 | 64 | +    }  | 
 | 65 | +};  | 
0 commit comments