zoukankan      html  css  js  c++  java
  • leetcode347 前k个高频元素(Medium)

    题目来源:leetcode347 前k个高频元素

    题目描述:

    给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

    示例 1:

    输入: nums = [1,1,1,2,2,3], k = 2
    输出: [1,2]

    示例 2:

    输入: nums = [1], k = 1
    输出: [1]

    提示:

    你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
    你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
    题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
    你可以按任意顺序返回答案。

    解题思路:

    用map保存数字出现的次数,并进行排序。

    class Solution {
    public:
        static bool cmp(pair <int,int> p1,pair<int,int> p2){
            return p1.second>p2.second;
        }
        vector<int> topKFrequent(vector<int>& nums, int k) {
            map<int,int> m;
            int i;
            for(i=0;i<nums.size();i++){
                m[nums[i]]++;
            }
            vector<int> ans;
            vector<pair<int,int>> res(m.begin(),m.end());
            sort(res.begin(),res.end(),cmp);
            for(i=0;i<k;i++){
                ans.push_back(res[i].first);
            }
            return ans;
        }
    };
    

    或者也可以用最小堆。

    class Solution {
    public:
        vector<int> topKFrequent(vector<int>& nums, int k) {
            map<int,int> m;
            priority_queue<int,vector<pair<int,int>>,greater<pair<int,int>>> pq;
            for(auto i:nums){
                m[i]++;
            }
            for(auto it:m){
                if(pq.size()<k){
                    pq.push(make_pair(it.second,it.first));
                }
                else{
                    if(it.second>pq.top().first){
                        pq.pop();
                        pq.push(make_pair(it.second,it.first));
                    }
                }
            }
            vector<int> ans;
            while(!pq.empty()){
                ans.push_back(pq.top().second);
                pq.pop();
            }
            return vector<int>(ans.rbegin(),ans.rend());
        }
    };
    
  • 相关阅读:
    阻塞赋值和非阻塞赋值
    组合逻辑和时序逻辑
    信道估计常用算法
    Verilog有限状态机FSM
    希尔伯特变换
    微信小程序取消分享的两种方式
    orm 常用字段
    drf获取请求过来时的request
    WeChat--API
    Django之admin源码浅析
  • 原文地址:https://www.cnblogs.com/yjcoding/p/13336438.html
Copyright © 2011-2022 走看看