LeetCode 347. Top K Frequent Elements

来源:互联网 发布:php九九乘法表代码解释 编辑:程序博客网 时间:2024/06/16 00:39

解题思路:这一题和leetcode451题的思路是类似的,只不过是返回前topK出现最多的频率,所以自然而然地相当先将vector写进map中,然后根据value值排序,注意题目要求的时间复杂度,使用全排sort虽然也是采用的快排思想,有时也会达到O(N2),所以使用部分排序,堆排序,C++ stl里面有partial_sort,仅对前K个排序.

class Solution {public:    vector<int> topKFrequent(vector<int>& nums, int k) {        map<int,int>tmp;        vector<int>k_nums;        for(int i = 0; i < nums.size(); i++){            tmp[nums[i]]++;        }        vector<pair<int, int> > res(tmp.begin(),tmp.end());        partial_sort(res.begin(), res.begin()+k, res.end(), CmpByValue());        for(int i = 0;i < k; i++){          k_nums.push_back(res[i].first);          }        return k_nums;    }private:    struct CmpByValue {      bool operator()(const pair<int,int>& p1, const pair<int,int>& p2) {      return p1.second > p2.second;    }  };  };


0 0
原创粉丝点击