当前位置: 首页 > 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;
http://www.lryc.cn/news/500097.html

相关文章:

  • 认证插件介绍
  • ASP.NET Core8.0学习笔记(二十四)——EF Core级联插入与删除
  • Docker打包SpringBoot项目
  • 【Linux】WSL:Win运行Linux
  • js循环导出多个word表格文档
  • Spring Boot 日志 配置 SLF4J 和 Logback
  • 企业级包管理器:专栏概述 (1)
  • 【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包
  • 书后习题答案:《Python程序设计基础(第2版)》,电子工业出版社,2020.01
  • Qt之第三方库‌QXlsx使用(三)
  • Python通过global实现多文件共享全局参数,方法
  • DevOps工程技术价值流:项目构建工具的选择与实践
  • 【数据库】复习
  • CorsConfig前后端数据跨域连接,IDEA右侧Maven窗口消失
  • Python微博动态爬虫
  • 【设计模式】单例模式 在java中的应用
  • burp suite 8
  • 为什么在Java中super与this不能共存于子类构造器中,其中this起什么作用
  • Hypothesis:高效的 Python 测试工具
  • Terminus Calculator 计算原理分享
  • Wwise 使用MIDI文件、采样音频
  • 在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案
  • 【RocketMQ 源码分析(一)】设计理念与源码阅读技巧
  • 独立ip服务器有什么优点?
  • 如何使用Python库连接Redis
  • Vant UI +Golang(gin) 上传文件
  • 【Unity高级】如何实现粒子系统的间歇式喷射
  • 通过linux命令获取自选股票价格及大盘涨跌幅
  • 透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
  • vue3字典数据的显示问题(使用hooks解决)