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

文章目录

    • 对应力扣的题目链接
    • 思路分析
    • 解决方案

问题一 、239. 滑动窗口最大值

题目链接  239. 滑动窗口最大值 - 力扣(LeetCode)

思路分析 :

              1、可能首先想到的是暴力破解 ,每一个区间,遍历一遍,找到最大值。将其搜集起来。

              2、单调队列的思想 ,每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数                      值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。

              3、 当然这个队列是没有的,具体功能需要我们自己实现。

单调队列的实现(  基于一个双向队列  deque  可以对对头和队尾进行操作 )
my_push( )   入队 :

入队之前和队列中元素进行比较,如果队列中的元素比要入队的元素小,则将其出队。

这样我们队列的对头元素总是最大值,然后我们滑动窗口移动的时候,每次都从对头拿去窗口的最大值。

void  my_push( int value ){while( !my_queue.empty()  && my_queue.back() < value){my_queue.pop_back();}my_queue.push_back( value );
}// my_queue  是我们定义的一个私有成员, 他是 deque 类型

my_pop( )   出队 :

因为我们在入队的时候,就已经将较小的元素出队了。

所以这里我们处理的是,如果窗口移除的元素value等于单调队列的出口元素,则将其出队。

 //出队void my_pop(int value){//当我们要入队的元素和队头元素相等时,说明要丢弃的是之前队列里面的最大值if(!my_queue_.empty() && value==myDeque_.front()){myDeque_.pop_front() ;}}

视频和更详细的文字讲解(代码随想录)

代码随想录

具体解决方案:

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {myDeque myDeque_;vector< int >data;if( nums.size() < k )  return data;//先放入前k个元素for( int i = 0 ; i < k ; i++ ){myDeque_.my_push(nums[i]);}//找到前k个的最大值data.push_back( myDeque_.getMax() );for(int i=k ; i< nums.size() ; i++ ){myDeque_.my_pop( nums[i-k] );     //myDeque_.my_push( nums[i] );data.push_back( myDeque_.getMax() );}return data;}private:
class myDeque{public:deque< int >myDeque_;    //定义一个双向队列//出队void my_pop(int value){//当我们要入队的元素和队头元素相等时,说明要丢弃的是之前队列里面的最大值if(myDeque_.empty()!=true && value==myDeque_.front()){myDeque_.pop_front() ;}}//入队void my_push(int value){while( myDeque_.empty()!=true && value > myDeque_.back() ){myDeque_.pop_back();}myDeque_.push_back(value);}int getMax(){return myDeque_.front();}
};};

问题二 、347.前 K 个高频元素 

题目链接:

347. 前 K 个高频元素 - 力扣(LeetCode)

思路分析:

  • 遇到一个数出现的次数,我们首先想到 使用map 这个容器,key 记录要计算的数,value 出现的次数
  • 优先级队列(底层是实现是一个堆),将map中的数据进行排序,采用小顶堆
  • 最后反向输入到需要返回的数组中

视频和更详细的文字讲解(代码随想录):

代码随想录

解决方案:

class Solution {
public:
//自定义比较函数
class MyCompare{public:bool operator()(const pair<int ,int>&left , const pair<int ,int>&right){return left.second > right.second;}
};vector<int> topKFrequent(vector<int>& nums, int k) {// if(nums.size() < k ) return ret;unordered_map< int ,int >temp;// key 是数字, value是出现的次数for(int i=0 ; i<nums.size() ; i++){temp[ nums[i] ]++;}// 排序使用 ,小顶堆(优先级队列)priority_queue<pair<int, int>, vector<pair<int, int>>, MyCompare > pq;//将map中的数据放入优先级队列,并从小到大排序for(unordered_map<int,int>::iterator it = temp.begin() ; it!=temp.end() ; it++){pq.push(*it);if(pq.size() >k ){pq.pop();      //将最小的值出队}//入队,并排序}//将队列中的数据导入retvector<int>ret(k);for( int i=k-1 ; i>=0 ;i--  ){ret[i]=pq.top().first;pq.pop();}return ret;}
};

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

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

相关文章

水利部加快推进小型水库除险加固,大坝安全监测是重点

国务院常务会议明确到2025年前&#xff0c;完成新出现病险水库的除险加固&#xff0c;配套完善重点小型水库雨水情和安全监测设施&#xff0c;实现水库安全鉴定和除险加固常态化。 为加快推进小型水库除险加固前期工作&#xff0c;水利部协调财政部提前下达了2023年度中央补助…

Mysql进阶-视图篇

介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xff0c;不保存查询结果。…

Lec13 Sleep Wake up

进程切换的流程 一个进程出于某种原因想要进入休眠状态&#xff0c;比如说出让CPU或者等待数据&#xff0c;它会先获取自己的锁&#xff1b;之后进程将自己的状态从RUNNING设置为RUNNABLE&#xff1b;之后进程调用switch函数&#xff0c;其实是调用sched函数在sched函数中再调…

【Git】快速入门安装及使用git与svn的区别常用命令

一、导言 1、什么是svn&#xff1f; SVN是Subversion的简称&#xff0c;是一个集中式版本控制系统。与Git不同&#xff0c;SVN没有分布式的特性。在SVN中&#xff0c;项目的代码仓库位于服务器上&#xff0c;团队成员通过向服务器提交和获取代码来实现版本控制。SVN记录了每个文…

数据库SQL

数据库&SQL 数据库基本概念数据库DataBase定义 数据库管理系统(DBMS)定义在JAVA项目中与数据库的结合数据库管理系统中常见的概念库与表的关系 SQL数据类型数字类型浮点类型字符类型TEXT类型日期类型 SQL语言的分类DDL:数据定义语言修改表结构的注意事项 DML:数据操作语言D…

基于显著性的无人机多光谱图像语义杂草检测与分类

Saliency-Based Semantic Weeds Detection and Classification Using UAV Multispectral Imaging(2023&#xff09; 摘要1、介绍2、相关工作2.1 监督学习2.2 半监督学习2.3 无监督学习 3、方法3.1 贡献3.2 PC/BC-DIM NEURAL NETWORK&#xff08;预测编码/有偏竞争-分裂输入调制…

智能文件改名:高效复制并删除冗余,简化文件管理“

在繁杂的电脑文件世界中&#xff0c;如何高效地管理文件成为了许多人的难题。为了解决这一难题&#xff0c;我们推出了一款智能文件改名工具&#xff0c;它能够轻松复制文件并删除目标文件夹中的冗余文件&#xff0c;让您的文件管理更加高效便捷。 第一步&#xff0c;我们要打…

IP代理中的动态轮换住宅代理是什么?有何作用?

随着越来越多的企业完善网络活动&#xff0c;IP代理的重要性变得显而易见。代理可确保顺利、安全且不受限制地访问互联网的大量资源。在不同类型的代理中&#xff0c;轮换代理脱颖而出&#xff0c;那么他哪里有别于其他IP代理呢&#xff1f; 一、什么是动态轮换代理&#xff1f…

OAuth 2.0实现统一认证

OAuth 2.0协议概念&#xff1a; OAuth 是 Open Authorization 的简写。OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 OAuth 的授权不会使第三方触及到用户的帐号信息&#xff08;如用户名与密码&#xff09;&#xff0c;即第…

​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】 课本里章节里所有蓝色字体的思维导图

mediapipe流水线分析 二

目标检测 Graph 一 流水线上游输入处理 1 TfLiteConverterCalculator 将输入的数据转换成tensorflow api 支持的Tensor TfLiteTensor 并初始化相关输入输出节点 &#xff0c;该类的业务主要通过 interpreter std::unique_ptrtflite::Interpreter interpreter_ nullptr; 实现…

香港高才通计划申请条件、通过率、百强大学名单以及好处分析!

香港高才通计划申请条件、通过率、百强大学名单以及好处分析&#xff01; 香港高端人才通行证计划简称香港高才通计划&#xff0c;是香港于2022年年底推出的一项人才引进计划。 目的是吸引世界各地具备丰富工作经验及高学历的高端人才到香港探索机遇&#xff0c;高端人才包括高…