347. Top K Frequent Elements

来源:互联网 发布:杭州网络维修招聘 编辑:程序博客网 时间:2024/05/21 06:20

Given a non-empty array of integers, return the k most frequent elements.

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.

class Solution {public:    struct fre{        int num;        int fre;        bool operator < (const struct fre& rhs) const{            return fre > rhs.fre;        }    } f[50000];    vector<int> topKFrequent(vector<int>& nums, int k) {        vector<int> ans;        map<int, int> m;        int sz = nums.size(), i = 0;        for(int num : nums){            if(m.count(num) == 0){                f[i].num = num;                m[num] = i;                f[i++].fre++;            } else {                f[m[num]].fre++;            }        }        sort(f, f + sz);        for(int i = 0; i < k; ++i){            ans.push_back(f[i].num);        }        return ans;    }};
0 0