博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-347 Top K Frequent Elements
阅读量:5052 次
发布时间:2019-06-12

本文共 1056 字,大约阅读时间需要 3 分钟。

题目描述

Given a non-empty array of integers, return the k most frequent elements.

 

题目大意

寻找数组中出现频率最高的前k个数字。

 

示例

E1

Input: nums = [1,1,1,2,2,3], k = 2Output: [1,2]

E2

Input: nums = [1], k = 1Output: [1]

 

解题思路

LeetCode@sxycwzwzq主要思想是利用priority_queue保存数字以及其次数出现的频率,由于priority_queue能将存储类型按序排列,因此可以依次入队列,当队列中的数字内容多于unique number - k时,将队列顶部的元素存储。

 

复杂度分析

时间复杂度:O(N * log(N - K))

空间复杂度:O(N)

 

代码

class Solution {public:    vector
topKFrequent(vector
& nums, int k) { map
unum; // 记录不同数字的出现频率 for(int n : nums) unum[n]++; int thre = unum.size() - k; vector
res; priority_queue
> ves; for(auto it = unum.begin(); it != unum.end(); ++it) { // 将数字的频率以及该数字入队列,注意pair的顺序 ves.push(make_pair(it->second, it->first)); // 若队列的数量多余thre,表示新加入的数字出现的频率较高 if(ves.size() > thre) { res.push_back(ves.top().second); ves.pop(); } } return res; }};

 

转载于:https://www.cnblogs.com/heyn1/p/11226203.html

你可能感兴趣的文章
[UE4]多播代理实例
查看>>
开奖计算---五星直选复式
查看>>
正则表达式
查看>>
HTML5 地理位置的获取 (精确)
查看>>
MongoDB - Cursors
查看>>
Servlet中Web.xml的配置详解
查看>>
PHP QR CODE 类库生成二维码
查看>>
SpringMVC(二七) 自定义视图
查看>>
git 版本控制
查看>>
浅谈叶小钗面试的几个问题
查看>>
进程间通信方式总结
查看>>
FCC 中级算法题 Finders Keepers
查看>>
Python之环境搭建与pycharm的配置django安装及MySQL数据库配置
查看>>
处理选中图片
查看>>
SpringBoot入门教程(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常
查看>>
iOS - 登陆、注销、修改密码
查看>>
给View添加阴影 和边框
查看>>
触发器创建及Navicat中使用
查看>>
Highmaps网页图表教程之图表配置项结构与商业授权
查看>>
JSON解析的成长史——原来还可以这么简单
查看>>