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;
    }
};
相关推荐
tanyongxi6634 分钟前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式
qq_5139704434 分钟前
力扣 hot100 Day76
算法·leetcode·职场和发展
fqbqrr1 小时前
2508C++,支持rdma通信的高性能rpc库
c++·rpc
Moshow郑锴1 小时前
机器学习相关算法:回溯算法 贪心算法 回归算法(线性回归) 算法超参数 多项式时间 朴素贝叶斯分类算法
算法·机器学习·回归
liulilittle1 小时前
BFS寻路算法解析与实现
开发语言·c++·算法·宽度优先·寻路算法·寻路
剪一朵云爱着2 小时前
PAT 1065 A+B and C (64bit)
算法·pat考试
喜欢吃燃面2 小时前
C++算法竞赛:位运算
开发语言·c++·学习·算法
草莓熊Lotso2 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他
困鲲鲲2 小时前
CPP多线程2:多线程竞争与死锁问题
c++·多线程·死锁
项目申报小狂人2 小时前
算法应用上新!自适应更新策略差分进化算法求解球形多飞行器路径规划问题,附完整MATLAB代码
开发语言·算法·matlab