当前位置: 首页 > news >正文

[代码随想录11]栈和队列的应用,逆波兰表达式求值 、滑动窗口最大值、前 K 个高频元素

前言

 这几个题目都是栈和队列的高频面试题目,主要是考察思路和coding能力,在前面几道题目的基础上进行延伸的。同时还有优先级队列和双端队列的用法

题目链接

150. 逆波兰表达式求值 - 力扣(LeetCode) 

239. 滑动窗口最大值 - 力扣(LeetCode) 

一、逆波兰表达式求值

 说点白话:我们好奇计算器是怎么处理运算的不?我们会在编译原理这门课程中学到,逆波兰表达式,俗称后缀表达式,具体来说就是,计算机并不知道计算逻辑的优先级(括号的优先级),但是他能找到一个括号最先匹配的,这样我们就会花了很大的时间去遍历查询括号,还有运算符的优先级问题,我们都需要考虑,有什么方法可以跳过这些呢?就是后缀表达式,我们让符号去匹配他的计算数值,同时利用栈来对符号的优先级进行排序,这样两个问题都能得到解决,足以可见逆波兰表达式(后缀表达式的腻害之处)。

tips:注意除法运算和减法的顺序第一次写错了,哈哈哈 

    int evalRPN(vector<string>& tokens) {stack<long long> st;for(int i=0;i<tokens.size();i++){if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){long long nums1=st.top();st.pop();long long nums2=st.top();st.pop();if(tokens[i]=="+")st.push(nums1+nums2);if(tokens[i]=="-")st.push(nums2-nums1);if(tokens[i]=="*")st.push(nums1*nums2);if(tokens[i]=="/")st.push(nums2/nums1);}else{st.push(stoll(tokens[i]));}}return st.top();}
};

二、滑动窗口求最大值

 思路:借助deque双端队列去实现这个题目比较简单一点,同时保持队列是递减的就行。

vector<int> maxSlidingWindow(vector<int>& nums, int k) {if(nums.size() == 0 || k == 0) return {};deque<int> deque;vector<int> res(nums.size() - k + 1);for(int j = 0, i = 1 - k; j < nums.size(); i++, j++) {// 删除 deque 中对应的 nums[i-1]if(i > 0 && deque.front() == nums[i - 1])deque.pop_front();// 保持 deque 递减while(!deque.empty() && deque.back() < nums[j])deque.pop_back();deque.push_back(nums[j]);if(i >= 0)res[i] = deque.front();}return res;}

三、前K个高频元素的值

 使用优先级队列,哈希表统计数据,压入数据,然后遍历出数据。

 

unordered_map<int, int> hmap;priority_queue<pair<int,int>> pq;vector<int> res;for (int i : nums)hmap[i]++;   //使用哈希表统计个数for (auto iter : hmap)pq.emplace(iter.second,iter.first);   //压入优先级队列for (int i = 0; i < k; i++)   //遍历k次找到前k个最大次数对应的值{ res.push_back(pq.top().second);pq.pop();}return res;

相关文章:

[代码随想录11]栈和队列的应用,逆波兰表达式求值 、滑动窗口最大值、前 K 个高频元素

前言 这几个题目都是栈和队列的高频面试题目&#xff0c;主要是考察思路和coding能力&#xff0c;在前面几道题目的基础上进行延伸的。同时还有优先级队列和双端队列的用法 题目链接 150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; 239. 滑动窗口最大值 - 力…...

认证插件介绍

本文档是针对 UOS 登录器插件给出开发指南&#xff0c;目的是为了让开发人员了解如何在 UOS 登录器上增加一种自定义认证方式&#xff0c;对插件接口做了详细说明以及实战练习。 文章目录 一、认证插件可以做什么&#xff1f;二、认证流程三、术语说明四、安全性五、可靠性六、…...

ASP.NET Core8.0学习笔记(二十四)——EF Core级联插入与删除

一、EF Core导航关系操作——级联插入 1.级联插入&#xff1a;在含有导航属性的实体&#xff08;主体实体&#xff09;中可以对实体进行级联插入。即在创建主体实体时直接把依赖实体进行赋值&#xff0c;此时只需要执行一次插入操作即可将主体实体与依赖实体同时入库。同时&am…...

Docker打包SpringBoot项目

一、项目打成jar包 在进行docker打包之前&#xff0c;先确定一下&#xff0c;项目能够正常的打成JAR包&#xff0c;并且启动之后能够正常的访问。这一步看似是可有可无&#xff0c;但是能避免后期的一些无厘头问题。 二、Dockerfile 项目打包成功之后&#xff0c;需要编写Doc…...

【Linux】WSL:Win运行Linux

WSL2&#xff08;Windows Subsystem for Linux 2&#xff09; 是 Microsoft 开发的技术&#xff0c;可在 Windows 系统上运行完整的 Linux 发行版环境。以下是详细的配置教程。 安装与配置 启用 WSL 功能 打开“开始”菜单&#xff0c;搜索 PowerShell&#xff0c;以 管理员身…...

js循环导出多个word表格文档

文章目录 js循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图js循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save// 文件操…...

Spring Boot 日志 配置 SLF4J 和 Logback

前言 在开发 Java 应用时&#xff0c;日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息&#xff0c;帮助开发者快速定位和解决问题。Spring Boot 项目默认集成了 SLF4J 和 Logback&#xff0c;使得日志配置变得简单而灵活。本文将详细介绍如何在 …...

企业级包管理器:专栏概述 (1)

在当今的前端开发领域&#xff0c;包管理器已经成为了每一位开发者不可或缺的工具。它们就像一个个神奇的工具箱&#xff0c;里面装满了各种各样的工具&#xff08;即软件包&#xff09;&#xff0c;帮助我们快速搭建项目、实现功能&#xff0c;极大地提高了开发效率。接下来&a…...

【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包

STM32-MBD&#xff08;1&#xff09;安装 STM32 硬件支持包 【动手学电机驱动】STM32-MBD&#xff08;1&#xff09;安装 STM32 硬件支持包 1. 必须的软硬件条件2. 嵌入式硬件支持包2.1 Embedded Coder2.2 嵌入式硬件支持包2.3 Embedded Coder Support Package for STMicroelec…...

书后习题答案:《Python程序设计基础(第2版)》,电子工业出版社,2020.01

【持续更新】 第3章 from math import *x1 float(input("请输入x1: ")) # print(x1) x2 float(input("请输入x2: ")) y1 float(input("请输入y1: ")) y2 float(input("请输入y2: "))dis sqrt(pow(x1 - x2, 2) pow(y1 - y2, 2))…...

Qt之第三方库‌QXlsx使用(三)

Qt开发 系列文章 - QXlsx&#xff08;三&#xff09; 目录 前言 一、Qt开源库 二、QXlsx 1.QXlsx介绍 2.QXlsx下载 3.QXlsx移植 4.修改项目文件.pro 三、使用技巧 1.添加头文件 2.写入数据 3.读出数据 总结 前言 Qt第三方控件库是指非Qt官方提供的、用于扩展Qt应用…...

Python通过global实现多文件共享全局参数,方法

Python通过global实现多文件共享全局参数 global关键字,全局变量 基础用法 这种用法&#xff0c;不能在其他的py文件中使用&#xff0c; x 6 def func():global x #定义外部的xx 10 func() print (x) #输出10共享参数 新建glo.py文件&#xff08;全局变量文件&#xff09;…...

DevOps工程技术价值流:项目构建工具的选择与实践

在快速迭代的软件工程领域&#xff0c;项目构建工具扮演着举足轻重的角色。它们不仅自动化了构建、测试、打包和部署等关键环节&#xff0c;还显著提升了开发效率和质量。本文将深入探讨后端常用的Maven和Gradle&#xff0c;以及前端不可或缺的NPM&#xff0c;并重点对比Maven与…...

【数据库】复习

数据库期中复习——概念填空_在修改数据结构时,为了保证数据库的数据独立性-CSDN博客 选择题 关系数据理论-数据库习题_数据库关系理论考题-CSDN博客 关系、关系模式、关系模型区别和联系 关系&#xff1a;元组的集合&#xff0c;一张表 关系模式&#xff1a;关系的描述 R(…...

CorsConfig前后端数据跨域连接,IDEA右侧Maven窗口消失

前后端数据跨域连接&#xff08;分页查询并显示&#xff09; 一、后端添加分页查询 分页查询核心就是&#xff1a;每页需要显示多少条记录(pageSize)&#xff0c;当前查看第几页(pageNum);MySQL提供了分页函数limit m,n select * from table limit (pageNum-1)*pageSize, pa…...

Python微博动态爬虫

本文是刘金路的《语言数据获取与分析基础》第十章的扩展&#xff0c;详细解释了如何利用Python进行微博爬虫&#xff0c;爬虫内容包括微博指定帖子的一级评论、评论时间、用户名、id、地区、点赞数。 整个过程十分明了&#xff0c;就是用户利用代码模拟Ajax请求&#xff0c;发…...

【设计模式】单例模式 在java中的应用

文章目录 引言什么是单例模式单例模式的应用场景单例模式的优缺点优点缺点 单例模式的基本实现饿汉式单例模式懒汉式单例模式双重检查锁定静态内部类枚举单例 单例模式的线程安全问题多线程环境下的单例模式线程安全的实现方式1. **懒汉式单例模式&#xff08;线程不安全&#…...

burp suite 8

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

为什么在Java中super与this不能共存于子类构造器中,其中this起什么作用

在 Java 中&#xff0c;super 和 this 是两个关键字&#xff0c;它们在子类的构造器中有特定的用途和限制。 super 关键字&#xff1a; super 用于从父类&#xff08;超类&#xff09;访问成员&#xff08;属性和方法&#xff09;或者调用父类的构造方法。 在子类的构造器中&…...

Hypothesis:高效的 Python 测试工具

简介&#xff1a;Hypothesis 是一个强大的 Python 测试库&#xff0c;旨在自动生成各种测试案例&#xff0c;以帮助开发者发现潜在的边界问题和隐藏的错误。通过对输入数据进行智能化的探索&#xff0c;Hypothesis 能够为测试提供更全面的覆盖&#xff0c;避免遗漏一些极端或不…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...