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

算法训练营day11 栈与队列(栈的应用,单调队列,优先队列)

💡 解题思路

  1. 📝 确定输入与输出
  2. 🔍 分析复杂度
  3. 🔨 复杂题目拆分严谨且完整 地拆分为更小的可以解决的子问题(栈和队列的功能,栈和队列的变体应用)–(多总结
  4. 💭 选择处理逻辑: 根据拆分后的子问题,总结并选择合适的问题处理思路单调队列,优先队列
  5. 🔎 检查特殊情况:边界条件和特殊情况
  6. 🏁 返回结果

7. 逆波兰表达式求值 (栈的应用)

class Solution {public static int evalRPN(String[] tokens) {Set<Character> set = new HashSet<>();set.add('+');set.add('-');set.add('*');set.add('/');Stack<Integer> stack = new Stack<>();for (String token : tokens) {char c = token.charAt(0);if (token.length() == 1 && set.contains(c)) {if (stack.size() < 2) {  } else {int a = stack.pop();int b = stack.pop();stack.push(calculate(b, a, c));}} else {stack.push(Integer.parseInt(token));}}return stack.pop();}public static int calculate(int num1, int num2, char operation) {int result = 0;switch(operation) {case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':result = num1 / num2;break;default:}return result;}
}

239. 滑动窗口最大值(单调队列)

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;Deque<Integer> deque = new LinkedList<Integer>();for (int i = 0; i < k; i++) {while(!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) {deque.pollLast();}deque.offerLast(i);}int[] ans = new int[n-k+1];ans[0] = nums[deque.peekFirst()];for (int i = k; i < n; i++) {while(!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {deque.pollLast();}deque.offerLast(i);while (deque.peekFirst() <= i - k) {deque.pollFirst();}ans[i-k+1] = nums[deque.peekFirst()];}return ans;}
}

347.前 K 个高频元素(优先队列)

class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int num : nums) {map.put(num, map.getOrDefault(num, 0) + 1);}PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] m, int[] n) {return m[1] - n[1];}});for (Map.Entry<Integer, Integer> entry : map.entrySet()) {int num = entry.getKey(), count = entry.getValue();if (queue.size() == k) {if (queue.peek()[1] < count) {queue.poll();queue.offer(new int[] {num, count});}} else {queue.offer(new int[]{num, count});}}int[] res = new int[k];for (int i = 0; i < k; i++) {res[i] = queue.poll()[0];}return res;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SSRF漏洞深入利用与防御方案绕过技巧
  • 多表联合的查询(实例)、对于前端返回数据有很多表,可以分开操作、debug调试教程
  • Linux开发讲课37--- ARM的22个常用概念
  • 初步探究Rust生态与图形界面编程
  • zookeeper在哪里能用到
  • Python-PLAXIS自动化建模技术与典型岩土工程
  • 【web】-sql注入-login
  • VSCode remote无法链接
  • 使机器人在执行任务倒快递
  • 【数智化CIO展】三一集团CIO吕青海:企业高速发展“数字化”是基础,“数智化”是升华...
  • MySQL黑马教学对应视屏笔记分享之聚合函数,以及排序语句的讲解笔记
  • 查询(q_proj)、键(k_proj)和值(v_proj)投影具体含义
  • CSS上下悬浮特效
  • OpenCV和PIL进行前景提取
  • AWS-S3实现Minio分片上传、断点续传、秒传、分片下载、暂停下载
  • hexo+github搭建个人博客
  • ECS应用管理最佳实践
  • Java的Interrupt与线程中断
  • laravel5.5 视图共享数据
  • Logstash 参考指南(目录)
  • oldjun 检测网站的经验
  • vue:响应原理
  • Xmanager 远程桌面 CentOS 7
  • 番外篇1:在Windows环境下安装JDK
  • 记一次删除Git记录中的大文件的过程
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 判断客户端类型,Android,iOS,PC
  • 以太坊客户端Geth命令参数详解
  • 1.Ext JS 建立web开发工程
  • UI设计初学者应该如何入门?
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #HarmonyOS:基础语法
  • (2020)Java后端开发----(面试题和笔试题)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (floyd+补集) poj 3275
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (接口自动化)Python3操作MySQL数据库
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)认识微服务
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Core 项目指定SDK版本
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .Net多线程Threading相关详解
  • .net和jar包windows服务部署
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @Builder用法