【代码随想录算法训练营——Day11】栈与队列——150.逆波兰表达式求值、239.滑动窗口最大值、347.前K个高频元素

LeetCode题目链接
https://leetcode.cn/problems/evaluate-reverse-polish-notation/
https://leetcode.cn/problems/sliding-window-maximum/
https://leetcode.cn/problems/top-k-frequent-elements/

题解
150.逆波兰表达式求值、
不能用tokens[i] >= "0" && tokens[i] <= "9"来判断数字,因为会有三位数。被AI发现的bug。

239.滑动窗口最大值
拿到题目,经提示已经知道是用队列。但是重要的是用队列记录什么。
看题解(视频),维护一个单调队列,由我们自己来实现,每次新加入一个元素到队列里时,把前面所有小于其值的值都pop出队列,维持队列出口为当前窗口的最大值。
实现代码的过程中,有一个不明白的点是,为什么当前维护的最大值不会是已经在窗口左侧边缘外的值?找到原因了,代码写的不是很对,要弹出窗口前面的那个值。
又改了两个地方,一个是改成deque的实现,一个是新加入的值要与back()比较,如果比较的值更小要pop_back(),从尾部弹出,可以防止[3,1,2]以及其下一步的[1,2,0]这样的队列维护值发生。

347.前K个高频元素
想了用hash来存,但排序会丢失下标的信息;再想到用map来存,但不好根据值排序。
看题解,发现用map排序行。于是写了个下一回写不出的代码,主要是sort的cmp集成代码,还有遍历pair代码也写不出。感觉都是语法问题,写几次就会了。
接着看题解,语法也挺难,思路,要用到小顶堆,堆的数据结构和代码没怎么写过,下回再补。

代码

//150.逆波兰表达式求值
#include <iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;for (int i = 0;i < tokens.size();i++) {if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {int tmp1 = st.top();st.pop();int tmp2 = st.top();st.pop();if (tokens[i] == "+") st.push(tmp1 + tmp2);else if (tokens[i] == "-") st.push(tmp2 - tmp1);else if (tokens[i] == "*") st.push(tmp1 * tmp2);else st.push(tmp2 / tmp1);}else {st.push(stoi(tokens[i]));}}return st.top();}
};int main() {vector<string> tokens = { "10","6","9","3","+","-11","*","/","*","17","+","5","+" };Solution s;printf("%d", s.evalRPN(tokens));return 0;
}
//239.滑动窗口最大值
#include <iostream>
#include <vector>
#include <queue>
using namespace std;class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> result;//queue<int> que;deque<int> que;for (int i = 0;i < k;i++) {/*while (!que.empty() && que.front() < nums[i]) {que.pop_front();}*/while (!que.empty() && nums[i] > que.back()) {que.pop_back();}que.push_back(nums[i]);}result.push_back(que.front());for (int i = k;i < nums.size();i++) {if (!que.empty() && nums[i - k] == que.front()) {que.pop_front();}/*while (!que.empty() && que.front() < nums[i]) {que.pop();}*/while (!que.empty() && nums[i] > que.back()) {que.pop_back();}que.push_back(nums[i]);result.push_back(que.front());}return result;}
};int main() {vector<int> nums = { 1,3,1,2,0,5 };int k = 3;Solution s;vector<int> result = s.maxSlidingWindow(nums, k);for (int i = 0;i < result.size();i++) {printf("%d ", result[i]);}return 0;
}
//347.前K个高频元素
vector<int> topKFrequent(vector<int>& nums, int k) {map<int, int> hash;for(int i = 0;i < nums.size();i++){hash[nums[i]]++;}vector<pair<int, int>> tmp(hash.begin(), hash.end());sort(tmp.begin(), tmp.end(), [](const pair<int, int>& a, const pair<int, int>& b) {return a.second > b.second; // 按照值降序排列});vector<int> result;int num = 0;for(const auto& pair : tmp){if(num < k){result.push_back(pair.first);num++;}}return result;}

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

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

相关文章

Docker 容器化部署核心实战——镜像仓库管理与容器多参数运行详解

摘要&#xff1a; 在当今云原生技术迅速发展的背景下&#xff0c;Docker 已成为应用容器化的首选工具。本文作为“Docker 容器化部署核心实战&#xff1a;从镜像仓库管理、容器多参数运行到 Nginx 服务配置与正反向代理原理解析”系列的第一篇&#xff0c;将深入探讨 Docker 镜…

ESP8266无法连接Jio路由器分析

我查了一下关于这些 Jio 路由器型号&#xff08;尤其是 JCOW414 和 JIDU6801&#xff09;的公开资料&#xff0c;下面是我能拿到的内容 对比这些型号可能带来的问题&#xff0c;以及对你排障的补充建议。 路由器型号 & 公开已知特性 型号已知 / 可查特性和 ESP8266 的潜在…

传智播客--MySQL

DAY01 MySQL入门 第一章 数据库介绍 1.1 什么是数据库 数据存储的仓库&#xff0c;本质上是一个文件系统&#xff0c;作用&#xff1a;方便管理数据的。 1.2 数据库管理系统 数据库管理系统&#xff08;DataBase Management System, DBMS&#xff09;&#xff1a;指一种操作和管…

[Dify] 实现“多知识库切换”功能的最佳实践

在构建知识驱动的问答系统或 AI 助手时,一个常见需求是:根据用户问题所属领域或上下文,切换使用不同的知识库(Knowledge Base, KB)进行检索。这样可以提升回答的准确性、减少无关内容干扰,在多业务线或多主题应用中尤其有用。 本文将介绍: 为什么要做知识库切换 Dify …

Jenkins运维之路(Jenkins流水线改造Day02-2-容器项目)

上篇文章中已经将绝大部分&#xff0c;Jenkins容器项目打包的相关功能改造完成了&#xff0c;这里在对构建部署后的告警类操作进行一些补充1.流水线告警1.1 安装钉钉插件image-202509151111086851.2 配置钉钉插件image-20250915111235865image-202509151115328291.3 Pipeline钉…

64_基于深度学习的蝴蝶种类检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍&#x1f3af; 功能展示&#x1f31f; 一、环境安装&#x1f386; 环境配置说明&#x1f4d8; 安装指南说明&#x1f3a5; 环境安装教学视频 &#x1f31f; 二、数据集介绍&#x1f31f; 三、系统环境&#xff08;框架/依赖库&#xff09;说明&#x1f9f1; 系统环…

N1ctf-2025-PWN-ez_heap近队容器的礼仪

ez_heap 保护全开 程序逻辑&#xff1a; 读入0x30的字符串&#xff0c;进行字符串校验&#xff1a;以冒号为标志split&#xff0c;分成四份。最后输入字符串形如&#xff1a; xor 0x111111111111111 validate badmin:p64(xor)b:Junior:111111创建0x180的chunk存放note 结构体…

纵深防御实践:东方隐侠CI/CD安全体系构建全解析

前言:CI/CD安全的必要性 企业上云是近些年的潮流,但是风险如影随形。之前有家电商平台出了个大岔子——半夜自动发新版本的时候,因为流程里没做安全检查,直接导致系统故障,一天就损失了300多万。这还不算完,某银行测试人员通过未授权的自动发布流程把代码推到了生产环境…

2025年渗透测试面试题总结-71(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2. 渗透测试流程 & 内网渗透经验 3. SQL注入报错利用 4. XSS利用&#xff08;反射型/DOM型&#xff0…

基于Echarts+HTML5可视化数据大屏展示-茶园大数据平台指挥舱

效果展示&#xff1a;代码结构&#xff1a;主要代码实现 index.html布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

华为网路设备学习-33(BGP协议 八)BGP路由 选路规则

一、目标与背景BGP路由特性&#xff1a;支持丰富的路径属性选路规则多样注&#xff1a;在BGP路由表中最优选&#xff0c;不一定是路由表中的最优选。有可能存在静态路由或者ospf路由等&#xff0c;其优先级高于BGP路由。二、选路规则概述从1到12&#xff0c;依次对比优先级。一…

深度学习(七):梯度下降

梯度下降&#xff08;Gradient Descent&#xff09;是深度学习中最核心的优化方法之一&#xff0c;它通过迭代更新模型参数&#xff0c;使得损失函数达到最小值&#xff0c;从而训练出性能良好的神经网络模型。 基础原理 损失函数 在深度学习中&#xff0c;损失函数 L(θ) 是衡…

常见岩性分类与油气勘探意义笔记

常见岩性分类与油气勘探意义笔记 相关科普视频可查看【说说岩石的分类-哔哩哔哩】 一、岩石基本分类体系 根据成因&#xff0c;自然界岩石可分为三大类&#xff0c;其中沉积岩与油气勘探关系最为密切&#xff1a; 1. 火成岩&#xff08;岩浆岩&#xff09; 由岩浆冷却凝固…

【Kubernetes】Tomcat 启用 Prometheus 监控指标

之前出过一篇文章关于 “自定义监控指标实现业务 HPA 伸缩” &#xff0c;其中使用了 webapp 应用的指标数据&#xff08;JVM&#xff09;&#xff0c;接下来&#xff0c;这篇文章将介绍如何在通过 Tomcat 部署的 webapp 中启用 Metrics 指标&#xff0c;一起来看看吧&#xf…

JVM 三色标记算法详解!

目录1. 什么是三色标记算法&#xff1f;三种颜色及其含义&#xff1a;2. 基础三色标记算法流程 (非并发)3. 并发场景下的挑战&#xff1a;一致性问题3.1. 漏标 (Missing Live Object) - 最严重的问题3.2. 错标 (Floating Garbage) - 不那么严重的问题4. 屏障机制 (Barrier) - 解…

优化神经网络模型以提升R²值至0.99的全面方案

优化神经网络模型以提升R值至0.99的全面方案 1. 问题分析与背景 在深度学习项目中&#xff0c;提升模型的R&#xff08;决定系数&#xff09;值至0.99是一个具有挑战性的目标&#xff0c;特别是在处理复杂的时间序列数据时。我们的现有模型结合了LSTM层、自注意力机制和MLP处理…

pgNow:一款免费的PostgreSQL监控与性能诊断工具

pgNow 是一款免费的桌面工具&#xff0c;可以为 PostgreSQL 数据库提供快速集中的监控与性能诊断。 pgNow 不依赖代理&#xff0c;无需任何配置&#xff0c;可以帮助开发者或数据库管理员&#xff08;DBA&#xff09;直观地查看数据库的统计信息和关键性能指标。 功能特性 跨平…

深入理解栈与队列——从原理理解到实战应用

目录 一、引言 二、栈&#xff08;Stack&#xff09; 2.1 栈的基本概念 2.2 栈的使用 2.3 栈的模拟实现 2.4 栈的实战应用 2.4.1 括号匹配 2.4.2 逆波兰表达式求值 2.4.3 出栈入栈次序匹配 2.4.4 最小栈 三、队列&#xff08;Queue&#xff09; 3.1 队列的基本概念 …

用html5写王者荣耀之王者坟墓的游戏2deepseek版

我将为您创建一个王者荣耀英雄坟墓游戏的提词器HTML页面。这个工具将帮助游戏主播或玩家在游戏中快速查看英雄技能、连招顺序等信息。设计思路 创建英雄选择界面实现提词器显示区域&#xff0c;可自定义文本内容添加字体大小、滚动速度控制设计符合王者荣耀风格的UI下面是…

轻阅读:一键解决浏览器无法预览Office文档的实用方案

在日常办公中&#xff0c;通过浏览器直接打开Word、Excel或PPT等文档时&#xff0c;常遇到“需下载后用本地软件打开”的困扰&#xff0c;不仅流程繁琐&#xff0c;还面临格式兼容、设备存储不足等问题。轻阅读&#xff08;QingYueDu&#xff09;作为一款轻量级文件在线预览工具…