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

【LeetCode Hot100】栈篇

前言

        本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。


20. 有效的括号

一句话题意

        验证括号序列有效性。

一句话题解

        用双向队列模拟栈,然后验证即可。

class Solution {public boolean isValid(String s) {Deque<Character> q = new LinkedList<>();for(char c:s.toCharArray()){if(c==']'){if(q.size()==0)return false;char cc = q.pollFirst();if(cc=='[')continue;return false;}else if(c==')'){if(q.size()==0)return false;char cc = q.pollFirst();if(cc=='(')continue;return false;}else if(c=='}'){if(q.size()==0)return false;char cc = q.pollFirst();if(cc=='{')continue;return false;}q.addFirst(c);}return q.size() == 0;}
}

155. 最小栈

一句话题意

        要求实现一个数据结构。

        实现 MinStack 类:

  • MinStack() 初始化堆栈对象。

  • void push(int val) 将元素val推入堆栈。

  • void pop() 删除堆栈顶部的元素。

  • int top() 获取堆栈顶部的元素。

  • int getMin() 获取堆栈中的最小元素。

一句话题解

        用两个双向队列,一个模拟栈,一个模拟对应的单调栈,每次往最小值。

class MinStack {Deque<Integer> u;Deque<Integer> umn;public MinStack() {u=new LinkedList<Integer>();umn=new LinkedList<Integer>();}public void push(int val) {u.addFirst(val);if(umn.size()==0)umn.addFirst(val);else umn.addFirst(Math.min(val,umn.peekFirst()));}public void pop() {if(u.size()!=0){u.pollFirst();umn.pollFirst();}}public int top() {return u.peekFirst();}public int getMin() {return umn.peekFirst();}
}

394. 字符串解码

一句话题意

        编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

        给定编码规则,问原先的字符串是什么。

一句话题解

        栈模拟,注意代码细节。

class Solution {public String decodeString(String s) {Deque<StringBuffer> q = new LinkedList<>();q.addFirst(new StringBuffer("!"));for(char c:s.toCharArray()){if(c>='0'&&c<='9'){char cc=q.peekFirst().charAt(0);if(cc>='0'&&cc<='9')q.addFirst(q.pollFirst().append(c));else q.addFirst(new StringBuffer().append(c));}else if(c=='['){q.addFirst(new StringBuffer().append(c));}else if(c>='a'&&c<='z'){char cc=q.peekFirst().charAt(0);if(cc>='a'&&cc<='z'||cc=='!'){q.addFirst(q.pollFirst().append(c));}else{q.addFirst(new StringBuffer().append(c));}}else if(c==']'){StringBuffer s1=q.pollFirst();StringBuffer res=new StringBuffer("");q.pollFirst();StringBuffer num=q.pollFirst();int len=num.length();for(int i=0;i<Long.valueOf(num.toString());i++){res.append(s1);}if(q.peekFirst().charAt(0)!='[')q.addFirst(q.pollFirst().append(res));elseq.addFirst(res);}}return q.pollFirst().toString().substring(1);}
}

739. 每日温度

一句话题意

        求序列后面比当前天温度高的最近的距离。

一句话题解

        单调递减栈。

class Solution {public int[] dailyTemperatures(int[] temperatures) {Deque<Integer> q = new LinkedList<>();int[] ans = new int[temperatures.length];Arrays.fill(ans,0);for(int i=0;i<temperatures.length;i++){if(q.size()==0||temperatures[q.peek()]>temperatures[i]){q.push(i);}else{while(q.size()>0&&temperatures[q.peek()]<temperatures[i]){ans[q.peek()]=i-q.poll();}q.push(i);}}return ans;}
}

84. 柱状图中最大的矩形

一句话题意

        给定一个竖状图,求矩形最大面积。

一句话题解

        单调栈,设定一个单调递增的单调栈,然后每次扔值的时候,如果比前一个大正常往栈里扔,如果小的话就弹出栈内元素。且我们可以知道,当栈内某个元素作为高度,他后面的元素对于他来说都是有贡献的,我们只需要把这个算出来即可。

class Solution {public int largestRectangleArea(int[] heights) {int n = heights.length;int ans = 0;Deque<Integer> q = new LinkedList<>();q.addFirst(-1);for (int i = 0; i <= n; i++) {int h;if(i==n) h=-1;else h=heights[i];while (q.size() > 1 && heights[q.peekFirst()] >= h) {int hh = heights[q.pollFirst()];int len = i - q.peekFirst() - 1;ans=Math.max(ans, hh * len);}q.addFirst(i);}return ans;}
}

http://www.xdnf.cn/news/262063.html

相关文章:

  • 计算机视觉与深度学习 | 视觉里程计算法综述(传统+深度)
  • 复刻低成本机械臂 SO-ARM100 组装篇(打螺丝喽)
  • firewall docker 冲突问题解决(亲测有效)
  • Windows下编译WebRTC源码
  • [更新完毕]2025东三省C题深圳杯C题数学建模挑战赛数模思路代码文章教学: 分布式能源接入配电网的风险分析
  • AtCoder Beginner Contest 404(ABCDE)
  • 什么是运算符重载
  • word怎么删除空白页?word最后一页删不掉怎么办
  • 基于开源AI大模型与AI智能名片S2B2C商城小程序的线上活动执行优化研究
  • SQL中的Subquery CTE Temporary Table 区别
  • HTTP基础介绍+OSI七层参考模型+HTTP协议介绍
  • 【Elasticsearch】实现气象数据存储与查询系统
  • 总账业务数据——Part 1
  • 单片机嵌入式CAN库
  • 在 Ubuntu 上安装 cPanel
  • 【Qt】初识Qt
  • 【科研绘图系列】R语言绘制世界地图(map plot)
  • 在多线程环境下如何设计共享数据结构保证原子操作与数据一致性
  • 第十章:反击的序曲(续)
  • JavaScript性能优化实战(8):缓存策略与离线优化
  • JavaScript:pc端网页特效--元素偏移量offset系列
  • flask 获取各种请求数据:GET form-data x-www-form-urlencoded JSON headers 上传文件
  • 每天学一个 Linux 命令(35):dos2unix
  • SMT贴片检验标准核心要点与实施规范
  • MySQL进阶(三)
  • 欺骗单页应用(SPA)渲染隐藏路由 -- trouble at the spa b01lersCTF
  • Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全
  • NuttX 与 PX4 系统开发全流程详解
  • 《AI大模型应知应会100篇》第46篇:大模型推理优化技术:量化、剪枝与蒸馏
  • 基于 SAFM 超分辨率上采样模块的 YOLOv12 改进方法—模糊场景目标检测精度提升研究