347. Top K Frequent Elements

Given an integer array nums and an integer k, return the k most frequent elements . You may return the answer in any order.

Example 1:

复制代码
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

复制代码
Input: nums = [1], k = 1
Output: [1]

Constraints:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • k is in the range [1, the number of unique elements in the array].
  • It is guaranteed that the answer is unique.

Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

复制代码
class Solution {
public:
    class mycomparision{
    public://别忘记加上
        bool operator()(const pair<int,int>&lhs,const pair<int,int>& rhs){//重载()运算符
            return lhs.second>rhs.second;
        }
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {
        //统计元素出现频率
        unordered_map<int,int>map;
        for(int i=0;i<nums.size();i++){
            map[nums[i]]++;
        }
        //频率排序+定义小顶堆
        priority_queue<pair<int,int>,vector<pair<int,int>>,mycomparision>pri_que;
        //用固定大小为K的小顶堆扫描所有频率的大小
        for(unordered_map<int,int>::iterator it=map.begin();it!=map.end();it++){
            pri_que.push(*it);
            if(pri_que.size()>k){
                pri_que.pop();
            }
        }
        //找出前K个高频元素,由于小顶堆先弹出最小的,所以数组倒序,注意要从k-1开始
        vector<int> result(k);
        for (int i = k - 1; i >= 0; i--) {
            result[i] = pri_que.top().first;
            pri_que.pop();
        }
        return result;
    }
};
相关推荐
j7~11 小时前
【Linux网络加餐】(篇七)网络版计算器(中):协议落地、报文分隔与完整链路
linux·c++·网络编程·tcp·报文分割·网络计算器·协议落地
天天喝旺仔11 小时前
Git 内部原理深度解析:从 blob/tree/commit 对象到 packfile 与垃圾回收
数据结构·数据库·git·算法·哈希
AIGCmagic社区11 小时前
KITTI AbsRel从6.5压到5.4,Marigold V2用一张32GB卡把编辑DiT收成单步深度估计
人工智能·算法·aigc·ai多模态
青少儿编程课堂11 小时前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
6Hzlia12 小时前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 锚点游标与断点检测法
c++·算法·leetcode
Severus_black12 小时前
【C++初阶】模板初阶——为何C++能和C语言拉开差距?
c++
Edward The Bunny12 小时前
Leetcode Hot 100
数据结构·算法
hans汉斯12 小时前
数据挖掘|基于BP神经网络的少数民族村寨文化型旅游体验产品潜在游客挖掘
深度学习·神经网络·算法·yolo·软件工程·bp·汉斯出版社
艾莉丝努力练剑14 小时前
【AI大模型接入SDK】LLM会话管理模块设计
网络·c++·人工智能·学习·大模型
小此方14 小时前
「C++AI大模型接入SDK」(一) API接入与本地两种方式对比、API Key获取、API报文详解与简单API的构建
开发语言·c++·人工智能