zoukankan      html  css  js  c++  java
  • (leetcode题解)Top K Frequent Elements

    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.

    对于这种统计出现个数的题目,一般用map或unordered_map进行统计先,我开始的想法是通过统计之后,再用sort函数对pair的second进行排序输出,不过在leetcode的编译器一直不能识别重新定义的比较算法,我试着在本地ide上运行是可以通过的。

    贴出C++代码:

    //重新定义的比较函数
    bool compete(const pair<int,int>& a,const pair<int,int>& b)
    {
        return a.second > b.second;
    }
    vector<int> topKFrequent(vector<int>& nums, int k) {
        map<int,int> vec;
        vector<int> res;
        vector<pair<int,int>> m_pair;
        for(int i=1;i<nums.size();i++)
        {
            vec[nums[i]]++;
        }
        for(auto &i:vec)
            m_pair.push_back(i);
        sort(m_pair.begin(),m_pair.end(),compete);  //通过比较second排序
        auto iter=m_pair.begin();
        for(int i=0;i<k;i++)
        {
            res.push_back(iter->first);
            iter++;
        }
        return res;
    }

    之后我改为优先队列,即统计个数之后,用优先队列对pair的second进行排序,再输出前k个即可,代码如下

    vector<int> topKFrequent(vector<int>& nums, int k) {
            map<int,int> vec;
            vector<int> res;
            priority_queue<pair<int,int>> p;
            for(int i=0;i<nums.size();i++)
            {
                vec[nums[i]]++;
            }
            for(auto &i:vec)
                p.push(make_pair(i.second,i.first));    //比较的是second
            for(int i=0;i<k;i++)
            {
                res.push_back(p.top().second);
                p.pop();
            }
            return res;
        }
  • 相关阅读:
    常用数据结构的应用场景
    数组与链表的对比
    [LeetCode 293] Flip Game
    [Leetcode] Palindrome Permutation 回文变换
    九大排序算法再总结
    query函数的可查询数据
    Column常用的参数
    sqlalchemy的常用字段
    sqlalchemy基本的增删改查
    sqlalchemy映射数据库
  • 原文地址:https://www.cnblogs.com/kiplove/p/6957474.html
Copyright © 2011-2022 走看看