[leetcode]347. 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.

Subscribe to see which companies asked this question

 

Solution:

1.使用hashtable获取每个元素出现的次数

2.使用小根堆heap排序(priority queue实现),获取前K个出现次数最多的元素pair

3.输出,注意是小根堆,要reverse一下

时间复杂度:O(N * logK)

 1 class CompareDist
 2 {
 3 public:
 4     bool operator()(pair<int, int> n1, pair<int, int> n2) 
 5     {
 6         return n1.second > n2.second;
 7     }
 8 };
 9 
10 class Solution {
11 public:
12     vector<int> topKFrequent(vector<int>& nums, int k) 
13     {
14         vector<int> ret;
15         unordered_map<int, int> htable;
16         
17         for (int key : nums) // get each key appears times
18             htable[key]++;
19 
20         priority_queue<pair<int, int>, vector<pair<int, int> >, CompareDist> sheap; // use min heap to get k biggest
21         for (auto elem : htable)
22         {
23             if (sheap.size() < k)
24             {
25                 sheap.push(elem);
26             }
27             else
28             {
29                 pair<int, int> heap_min = sheap.top();
30                 if (elem.second > heap_min.second)
31                 {
32                     sheap.pop();
33                     sheap.push(elem);
34                 }
35             }
36         }
37         
38         while (!sheap.empty())
39         {
40             pair<int, int> heap_min = sheap.top();
41             ret.push_back(heap_min.first);
42             sheap.pop();
43         }
44         reverse(ret.begin(), ret.end());
45         
46         return ret;
47     }
48 };

 

或者直接使用make_heap操作,时间复杂度O(N + KlogN) = O(N)

 1 vector<int> topKFrequent(vector<int>& nums, int k) 
 2     {
 3         unordered_map<int, int> htable;
 4         for (auto &n : nums) 
 5             htable[n]++;
 6 
 7         vector<pair<int, int>> heap;
 8         for (auto &i : htable) 
 9             heap.push_back({i.second, i.first});
10 
11         vector<int> result;
12         make_heap(heap.begin(), heap.end());
13         while (k--) 
14         {
15             result.push_back(heap.front().second);
16             pop_heap(heap.begin(), heap.end());
17             heap.pop_back();
18         }
19         return result;
20     }

 

转载于:https://www.cnblogs.com/ym65536/p/5537052.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合并Spark社区代码的正确姿势

原创文章&#xff0c;转载请保留出处 最近刚刚忙完Spark 2.2.0的性能测试及Bug修复&#xff0c;社区又要发布2.1.2了&#xff0c;国庆期间刚好有空&#xff0c;过了一遍2.1.2的相关JIRA&#xff0c;发现有不少重要修复2.2.0也能用上&#xff0c;接下来需要将有用的PR合到我们内…

.NET 中 GC 的模式与风格

垃圾回收&#xff08;GC&#xff09;是托管语言必备的技术之一。GC 的性能是影响托管语言性能的关键。我们的 .NET 既能写桌面程序 (WINFROM , WPF) 又能写 web 程序 (ASP.NET CORE)&#xff0c;甚至还能写移动端程序。。。不同使用场景的程序对 GC 的风格也有不同的要求&#…

(转)java中的 | ^ 分别是什么?

|是按位或 ^是按位抑或 &是按位与比如有两个数 int x 5;int y 11;System.out.println(x|y);System.out.println(x&y);System.out.println(x^y);结果是15&#xff0c; 1 &#xff0c;14 过程 x5 (0101二进制) y11(1011二进制) x|y 1111 15 x&y 0001 1 x…

[python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

一、学习目标 了解opencv中图像的逻辑运算了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld [[python opencv 计算机…

Android之如何判断当前是阿拉伯布局的方法

1 问题 判断当前是不是阿拉伯布局的方法 2 几种判断方法 @SuppressLint("NewApi")public static boolean isLayoutRtl(View view, Resources res) {if (res == null || view == null) return false;Locale curLocale = res.getConfiguration().locale;//如果当前语言…

【ArcGIS风暴】数字化实验:数据采集与编辑完整操作流程

一.实验平台:ArcGIS 9.3 二.实验目的:对甘肃省的十四个地级市进行图像配准、数据采集。 三.实验要求:掌握地理数据采集方法,图像配准及坐标投影,选择主要的点、线、面进行投影。 四.实验数据:甘肃省统计数据,甘肃省行政区划图。 (一).影像配准 第一步:加载…

loadrunner java 参数化_LoadRunner 参数化详解

LoadRunner&#xff0c;是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题&#xff0c;LoadRunner能够对整个企业架构进行测试。通过使用 LoadRunner&#xff0c;企业能最大限度地缩短测试时间&#xff0c;优化性…

Android之实现RTL的ViewPager

1 问题 如何实现RTL的ViewPager,就是滑动方向和我们之前滑动的方向相反,比如一般,我们用ViewPager滑动4个图片,依次顺序是 1 2 3 4 ,我们在页面1的时候,我们一般都是习惯向左滑动到2,现在需要实现手指向右滑动到2. 2 解决办法 1)我们可以使用ViewPager2,这个是可以支…

Why Apache Spark is a Crossover Hit for Data Scientists [FWD]

Spark is a compelling multi-purpose platform for use cases that span investigative, as well as operational, analytics. Data science is a broad church. I am a data scientist — or so I’ve been told — but what I do is actually quite different from what oth…

Blazor University (21)使用 RenderFragments 模板化组件 —— 传递占位符

原文链接&#xff1a;https://blazor-university.com/templating-components-with-renderfragements/passing-placeholders-to-renderfragments/将占位符传递给 RenderFragments源代码[1]说明&#xff1a;此页面的灵感来自用户 ℳisterℳagoo 的 Twitter 帖子。首先&#xff0c…

物联网(车联网)平台架构方案

技术支持QQ&#xff1a;787728951、车载终端网关采用mina/nettyspring架构&#xff0c;独立于其他应用&#xff0c;主要负责维护接入终端的tcp链接、上行以及下行消息的解码、编码、流量控制&#xff0c;黑白名单等安全控制&#xff0c;网关同时支持交通部JT/T808-2011、JT/T80…

[python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

一、学习目标 了解什么是ROI了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld [[python opencv 计…

【经典回放】JavaScript学习详细干货笔记之(二)

【经典回放】JavaScript学习详细干货笔记之(一) 【经典回放】JavaScript学习详细干货笔记之(二) 【经典回放】JavaScript学习详细干货笔记之(三) 一、JavaScript 数组 JavaScript数组的定义、使用都是非常简单的,从a17.htm就可以知道,仅仅定义的话,就使用: var …

java string类api_java基础—String类型常用api

1、字符串比较equalsequalsIgnoreCase 忽略大小写做比较2、字符串拆分(切片)splitString a "lemon:python:Java";//split切片之后的结果是一个一维字符串类型数组String[] arr a.split(":");for(int i 0 ;i System.out.println(arr[i]);}3、字符串截取…

解决冲突

人生不如意之事十之八九&#xff0c;合并分支往往也不是一帆风顺的。 准备新的feature1分支&#xff0c;继续我们的新分支开发&#xff1a; $ git checkout -b feature1 Switched to a new branch feature1修改readme.txt最后一行&#xff0c;改为&#xff1a; Creating a new …

Android之java.lang.OutOfMemoryError: Failed to allocate a ** byte allocation with **free bytes and 2M

1 问题 glide加载图片出现oom java.lang.OutOfMemoryError: Failed to allocate a 23970828 byte allocation with 2097152 free bytes and 2MB until OOM 2 解决办法 1) 简单粗暴点的在AndroidManifest.xml添加如下&#xff0c;增大安卓虚拟机内存 android:largeHeap"…

HQL入门学习

2019独角兽企业重金招聘Python工程师标准>>> package myHibernate; /** 测试简单的HQL语句* 2010年4月9日 23:36:54* */ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti…

Oracle精简客户端配置

2019独角兽企业重金招聘Python工程师标准>>> 由于Oracle client体积很大。而且安装后&#xff0c;基本上就用2个功能&#xff1a;TNS配置服务名和SQL*Plus。下面是一种小巧、快捷的Oracle客户端配置方法&#xff1a; 1.下载Instant Client 下载地址&#xff1a; htt…

【经典回放】JavaScript学习详细干货笔记之(三)

【经典回放】JavaScript学习详细干货笔记之(一) 【经典回放】JavaScript学习详细干货笔记之(二) 【经典回放】JavaScript学习详细干货笔记之(三) 一、再次从var开始说起 var到底是什么? 在前面的所有介绍中, JavaScript的var变量说明、是非常令人迷惑的事情。 var中…

WinUI迁移到.NET MAUI个人体验

迁移的初衷本人平时是做.net相关的工作&#xff0c;对于.net技术栈也有一些了解&#xff0c;自从新的.net能够跨平台之后&#xff0c;之前也有跨平台的ui框架Xamarin&#xff0c;现在微软推出了.NET MAUI这个说是 统一了开发体验&#xff0c;而且都RC版本了&#xff0c;所以本人…