代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素

239. 滑动窗口最大值

题目链接:239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值

文章讲解/视频讲解:https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.html

思路

设置一个大小为k的队列queue。

在滑动窗口处于初始位置时,将初始的k个元素推入队列中:
如果队列为空或者当前元素小于队列的队尾元素,直接将nums[i]推入队列尾部;
如果当前元素大于队列的队尾元素,则循环判断,只要队列的队尾元素小于当前元素,就将当前队尾排出,直到循环判断结束,将nums[i]推入队列尾部。
此时队列的队首就是当前窗口的最大值。

滑动窗口开始移动时,开始对整数数组nums的后续元素进行遍历:
此时滑动窗口的范围为[i, i + k - 1],如果nums[i - 1]等于队首元素,则将队首排出,说明此时队首已经不在滑动窗口中了;
对于当前值nums[i],如果队列为空或nums[i]小于队列的队尾元素,直接将nums[i]推入队列尾部,如果此时队列大小大于k,将队首排出;
如果nums[i]大于队列的队尾元素,则开始循环判断,只要队列的队尾元素小于nums[i],就将当前队尾排出,直到循环判断结束,将nums[i]推入队列尾部。
同样的,每次遍历,当前队列的队首就是当前窗口的最大值。

上述方法在构建队列时,可以保证队列中的元素是单调非增的,因此队首就是当前窗口的最大值。同时,因为需要对队列的队尾做排出操作,用deque双向队列来作为队列的容器。
注:如果用vector作为容器,会超时。因为排出队首元素是o(n)复杂度的。

C++实现

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> results;deque<int> dQ;for(int i = 0;i<k;i++){if(dQ.empty() || nums[i] <= dQ.back()){dQ.push_back(nums[i]);}else{while(!dQ.empty() && dQ.back() < nums[i]) dQ.pop_back();dQ.push_back(nums[i]);}}results.push_back(dQ.front());for(int i = k;i<nums.size();i++){if(nums[i - k] == dQ.front()) dQ.pop_front();if(dQ.empty() || nums[i] <= dQ.back()){dQ.push_back(nums[i]);if(dQ.size() > k) dQ.pop_front();}else{while(!dQ.empty() && dQ.back() < nums[i]) dQ.pop_back();dQ.push_back(nums[i]);}results.push_back(dQ.front());}return results;}
};

347.前 K 个高频元素

题目链接:347.前 K 个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

文章讲解/视频讲解:https://programmercarl.com/0347.%E5%89%8DK%E4%B8%AA%E9%AB%98%E9%A2%91%E5%85%83%E7%B4%A0.html

思路

用小顶堆来实现。
定义一种node结构,属性分别为值和频率。
首先遍历数组,统计每个元素的出现频率,将代表每个元素的node存入数组frequents。
定义一个存储node类型的小顶堆,堆的判断标准是node之间的频率,频率越低越靠前。
遍历数组frequents,将元素不断地push进这个小顶堆中,如果小顶堆的大小大于k,则将小顶堆的堆顶排出。

最终小顶堆中的所有元素,构成了前K个高频元素。

C++实现

struct node{int value;int frequence;
};class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {auto cmp = [](node a, node b){return a.frequence > b.frequence;};priority_queue<node, vector<node>, decltype(cmp)> Q(cmp);vector<node> frequents;unordered_map<int, int> hashMap;for(int i = 0;i<nums.size();i++){hashMap[nums[i]] += 1;}for(auto p : hashMap){frequents.push_back({p.first, p.second});}for(int i = 0;i<frequents.size();i++){Q.push(frequents[i]);if(Q.size() > k) Q.pop();}vector<int> results;while(!Q.empty()){results.push_back(Q.top().value);Q.pop();}return results;}
};

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

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

相关文章

sql server 2005 COUNT_BIG (Transact-SQL)

返回组中的项数。COUNT_BIG 的用法与 COUNT 函数类似。两个函数唯一的差别是它们的返回值。COUNT_BIG 始终返回 bigint 数据类型值。COUNT 始终返回 int 数据类型值。后面可能跟随 OVER 子句。 Transact-SQL 语法约定 语法 COUNT_BIG ( { [ ALL | DISTINCT ] expression } | * …

Study on Android【五】--自定义ContentProvider的语义

Android做到现在。开始感觉到Android确实还是太年轻。系统本身好不够成熟&#xff0c;相关文档更是少的可怜。在Android的旅途中到处是暗坑陷阱&#xff0c;掉进去摔得半死&#xff0c;还只能靠自己琢磨着爬出来。想 在大部分工作集中在了定义一套ContentProvider以及上层的显示…

2021面试题整理

BFC是什么&#xff0c;怎么使用&#xff1f; 什么是BFC&#xff1f;看这一篇就够了 宏任务与微任务 async function fn1 () {await fn2()console.log(1); } async function fn2 () {console.log(2); } console.log(3);setTimeout(function(){console.log(4) },0); fn1(); new …

asp.net ajax技巧6

今天继续学习章立民的书。讲到两个updatepannel的嵌套。比如下面的例子<asp:ScriptManager ID"ScriptManager" runat"server" /> <asp:UpdatePanel ID"OuterPanel" runat"server" UpdateMode"Conditional&q…

js eventLoop

eventLoop详解 宏任务和微任务的一个小事 在此补充一点顺序&#xff1a; 宏任务&#xff1a;setTimeout > setImediate 微任务&#xff1a;process.nextTick > promise.then

MYSQL 如果把数据文件保存到其他磁盘里

有人问起分开存储数据文件的问题。现在写下来。为了突破磁盘搜索的瓶颈。我们要把MYSQL的数据和索引保存到其他不同的磁盘中。目前还只是支持MyISAM引擎。在MYSQL中&#xff0c;官这个叫象征性链接。1、在WINDOWS下的象征性链接。数据库目录&#xff1a;E:\LAMP\mysql5\data数据…

《浏览器播放RTSP方案》之 VLC插件播放RTSP视频流

VLC插件播放RTSP视频流多版本chrome安装安装vlc软件开启浏览器的NPAPI设置编写测试页插件设置其他问题最后目前网页对于RTSP流直接播放不支持&#xff0c;目前有插件和转流两种方式&#xff0c;这里针对vlc插件播放做一个简单的梳理。 查看官网教程 vlcWebPlugin, 得知其浏览器…

[导入]ASP常用函数:getIMG()

目前还是有BUG的,最新的测试页面在: http://www.reallydo.com/getimg.asp正则分析页面在: http://jorkin.reallydo.com/article.asp?id380 发现BUG请在后面留言,谢谢. 1.31修正src后面有空格不能正确匹配.已修正.src为空时出错.已修正.发现BUG: 图片路径有多个空格时只能保留一…

《浏览器播放RTSP方案》之 VXGPlayer插件播放RTSP视频流

VXGPlayer插件播放RTSP视频流 总体来说vxgplayer是付费插件&#xff0c;更多支持的功能可以去官网详询。作为一个demo研究&#xff0c;检索资料和实现总结如下&#xff1a; 环境搭建 别人有一篇文章总结的很好&#xff0c;就不赘述。直接上链接 整合vxgPlayer使chrome支持vx…

MYSQL优化考虑十个方面

1&#xff09;索引 2&#xff09;sql优化 3&#xff09;锁 4&#xff09;延迟 5&#xff09;参数优化 6&#xff09;连接数 7&#xff09;cpu 8&#xff09;iops 9&#xff09;磁盘 10&#xff09;内存 转载于:https://www.cnblogs.com/zeenzhou/p/11344485.html

vite + vue2 + eslint 项目配置

// npm 和 yarn 皆可&#xff0c;这里以 yarn 举例安装 vue2 环境 yarn create vite// 选择 framework: vanilla // 不选 vue&#xff0c;是因为vue默认是vue3// 自行安装环境 yarn add vite-plugin-vue2 vue-template-compiler -D yarn add vue vue-router vuex // 配置 vue …

初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围

譬如 EAX AX AH AL 四个储存器, 真实存在的其实只有一个 EAX, AX AH AL 不过是不同的访问方式.11111111 11111111 11111111 11111111 : EAX11111111 11111111 11111111 11111111 : AX11111111 11111111 11111111 11111111 : AH11111111 11111111 11111111 11111111 : AL//譬如 …

element form 自定义校验

element-ui 表单校验总结 作为一名前端开发&#xff0c;会遇到各种各样的表单处理。为了给用户更好的体验&#xff0c;行内表单校验及错误展示被广泛使用。由于工作中用到element-ui较多&#xff0c;所以这里简单谈一谈日常工作遇到的【有意思】的表单交互。 element-ui官网链…

通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转)

本文将讨论&#xff1a; • 缓存和 Forms 身份验证 • 视图状态和会话状态 • 配置文件属性序列化 • 线程池饱和 • 模拟和设置配置文件 本文使用了下列技术&#xff1a; .NET Framework、ASP.NET、Windows Server 2003 本页内容 LoadControl 和输出缓存会话和输出缓存Fo…

cocos2d-x 3.0 alpha1 生成Qt qch帮助文档

Qt的助手挺好用的. 比chm好多了 cocos2d-x使用doxygen生成文档. 默认生成的是html形式, 需要打开浏览器, 这个是比较耗资源吧 可以修改配置, 让doxygen同时输出qch形式的帮助文档 打开 \cocos2d-x-3.0alpha1\docs\doxygen.config 修改其中几项: GENERATE_QHP YESQHP_NAMESPA…

如何去掉DataTable中的重复行(新增.net 2.0中最新解决方法---简便)

.net 1.1中的解决方法(转)1建立一个DataSetHelper类(DataSetHelper.cs) publicclassDataSetHelper...{ public DataSet ds; public DataSetHelper(ref DataSet DataSet) ...{ ds DataSet; } public DataSetHelper() ...{ ds null; } p…

AngularJS中巧用ngModel的$asyncValidators属性写一个验证唯一性的Direcitve

有这样的一个需求&#xff1a;添加用户的时候&#xff0c;根据主键判断当前添加用户的email是否已经被使用。为此&#xff0c;我们需要把主键和email来传递给远程的一个API&#xff0c;让API返回结果&#xff0c;告之当前email是否被使用过。写一个验证email唯一性的Directive&…

ASP技巧:在Access数据库中重命名表

下面代码是用Adox重命名Access表名的示例代码&#xff1a; Dim Conn,ConnStr,oCat,oTbl ConnStr "ProviderMicrosoft.Jet.OLEDB.4.0;Data Source" & Server.MapPath("data.mdb") Set oCatServer.CreateObject("ADOX.Catalog") oCat.Active…

Centos 系统安装NetCore SDK命令以及一系列操作(2)

ok,接下来安装dotnetCore的SDK&#xff0c;访问&#xff1a;https://dotnet.microsoft.com/download&#xff0c; 如下图&#xff0c;选择Linux&#xff0c; 选择一下这个Linux的发行版&#xff0c;我们选择Centos就行&#xff0c;然后执行这些命令去安装SDK&#xff0c;地址如…

这该死的高度,height,clientHeight,scrollHeight,offsetHeight

引言: 虽然有时候界面的设置不是我们这些后台代码人员的工作,但是有时候却难以理解控件生成时的一些怪事,比方在学习webabcd的扩张GridView中固定列时,你或许已经被其中的height,clientHeight,scrollHeight,offsetheight弄得晕晕的了,当然这些都是网页制作的一个基础,将其记下,…