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

Leetcode 刷题记录 16 —— 栈

本系列为笔者的 Leetcode 刷题记录,顺序为 Hot 100 题官方顺序,根据标签命名,记录笔者总结的做题思路,附部分代码解释和疑问解答,01~07为C++语言,08及以后为Java语言。

01 有效的括号

在这里插入图片描述

在这里插入图片描述

class Solution {public boolean isValid(String s) {int n = s.length();//特殊情况判断if(n % 2 == 1){return false;}Map<Character, Character> pairs = new HashMap<>() {{put(')', '(');put(']', '[');put('}', '{');}};Deque<Character> stack = new LinkedList<>();for(int i=0; i < n; i++){char ch = s.charAt(i);if(pairs.containsKey(ch)){ //右括号,做判断if(stack.isEmpty() || stack.peek() != pairs.get(ch)){return false;}stack.pop();}else{ //左括号,压入栈stack.push(ch);}}return stack.isEmpty();}
}

02 最小栈

在这里插入图片描述

在这里插入图片描述

class MinStack {public MinStack() {}public void push(int val) {}public void pop() {}public int top() {}public int getMin() {}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

方法:辅助栈

class MinStack {Deque<Integer> xStack;Deque<Integer> minStack;public MinStack() {xStack = new LinkedList<>();minStack = new LinkedList<>();minStack.push(Integer.MAX_VALUE);}public void push(int val) {xStack.push(val);minStack.push(Math.min(minStack.peek(), val));}public void pop() {xStack.pop();minStack.pop();}public int top() {return xStack.peek();}public int getMin() {return minStack.peek();}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

03 字符串解码

在这里插入图片描述

在这里插入图片描述

class Solution {int ptr;public String decodeString(String s) {LinkedList<String> stk = new LinkedList<>();ptr = 0;while(ptr < s.length()){char cur = s.charAt(ptr);if(Character.isDigit(cur)){String digits = getDigit(s);stk.addLast(digits); //1. 添加数字}else if(Character.isLetter(cur) || cur == '['){stk.addLast(String.valueOf(s.charAt(ptr++))); //2.添加单个字符}else{//获取括号中的字符串ptr++;LinkedList<String> sub = new LinkedList<>();while(!"[".equals(stk.peekLast())){sub.addLast(stk.removeLast());}Collections.reverse(sub);stk.removeLast(); //弹出左括号int time = Integer.parseInt(stk.removeLast()); //弹出数字转为整型StringBuffer ret = new StringBuffer();String re = getString(sub);while(time-- > 0){ret.append(re);}stk.addLast(ret.toString()); //3.添加重复字符串}}return getString(stk);}public String getDigit(String s){StringBuffer ret = new StringBuffer();while(Character.isDigit(s.charAt(ptr))){ret.append(s.charAt(ptr++));}return ret.toString();}public String getString(LinkedList<String> v){StringBuffer ret = new StringBuffer();for(String s : v){ret.append(s);}return ret.toString();}
}

04 每日温度

在这里插入图片描述

class Solution {public int[] dailyTemperatures(int[] temperatures) {int length = temperatures.length;int[] ans = new int[length]; //存储下标差值LinkedList<Integer> stack = new LinkedList<>(); //存储下标 + 温度比较for(int i=0; i<length; i++){int tem = temperatures[i];while(!stack.isEmpty() && tem > temperatures[stack.peek()]){int preIndex = stack.pop(); ans[preIndex] = i - preIndex; //⭐}stack.push(i);}return ans;}
}

05 柱状图的最大矩形

在这里插入图片描述

在这里插入图片描述

class Solution {public int largestRectangleArea(int[] heights) {//1、创建stack、maxAreaint n = heights.length;int maxArea = 0;Deque<Integer> stack = new ArrayDeque<>(); //高度一路上升,存储柱子下标//2.for循环、遍历柱子下标for(int i=0; i<=n; i++){int currHeight = (i == n) ? 0 : heights[i];while(!stack.isEmpty() && currHeight < heights[stack.peek()]){int height = heights[stack.pop()]; //⭐int width = stack.isEmpty() ? i : i - stack.peek() - 1;maxArea = Math.max(maxArea, height * width);}stack.push(i);}//3.返回最大面积return maxArea;}
}
http://www.dtcms.com/a/251070.html

相关文章:

  • [windows工具]OCR识文找图工具1.2版本使用教程及注意事项
  • [windows工具]OCR多区域识别导出excel工具1.2版本使用教程及注意事项
  • Unity3D仿星露谷物语开发63之NPC移动
  • XR-RokidAR-ADB环境搭建
  • OpenSpeedy:让游戏体验“飞”起来的秘密武器
  • 【Shader学习】完整光照效果
  • Unity基础-范围检测
  • 【Quest开发】初始项目环境配置
  • 用c语言实现简易c语言扫雷游戏
  • 嵌入式硬件篇---常见电平标准
  • NJet Portal 应用门户管理介绍
  • 实时操作系统(FreeRTOS、RT-Thread)RISC-V
  • 基于SpringBoot和Leaflet的电影票房时序展示-以《哪吒2》为例
  • Django图片管理系统
  • 在idea上打包DolphinScheduler
  • VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能
  • SAP实施服务专家——哲讯科技,赋能企业智慧升级
  • RTDETRv2 pytorch 官方版自己数据集训练遇到的问题解决
  • SQL Server 2025 预览版发布:AI深度集成、开发者体验飞跃与混合云新篇章
  • Composer 的 PHP 依赖库提交教程
  • Linux安装LLaMA Factory
  • Python数字信号处理——利用块间系数相关性的DCT域鲁棒盲图像水印(PyQT5界面)
  • linux云计算学习第八周,第九周
  • sqli-labs靶场54-65关(次数限制,数据更新)
  • Python爬虫实战:研究Mr. Queue相关技术
  • 【图像处理入门】7. 特征描述子:从LBP到HOG的特征提取之道
  • 智能土木通 - 土木工程专业知识问答系统02-RAG检索模块搭建
  • 幂级数 (0,R); R ;(R,+oo)
  • 图数据库neo4j部分用法浅讲
  • 计算机网络学习笔记:TCP三报文握手、四报文挥手