【leetcode】第五章 栈与队列part02

news/2025/2/15 21:48:57/

232.用栈实现队列

  • 用两个栈来实现
  • 当pop时,检测out栈是否为空,若为空,则将in栈的元素全都放入out栈中
class MyQueue {private Stack<Integer> in;private Stack<Integer> out;public MyQueue() {in = new Stack<>();out = new Stack<>();}public void push(int x) {in.push(x);}public int pop() {if (out.isEmpty()) {while (!in.isEmpty()) {out.push(in.pop());}}return out.pop();}public int peek() {if (out.isEmpty()) {while (!in.isEmpty()) {out.push(in.pop());}}return out.peek();}public boolean empty() {return in.isEmpty() && out.isEmpty();}
}

225. 用队列实现栈

  • 单个队列方法
  • 将前面n-1个元素弹出并加入底部,这样就可以模拟后进先出
class MyStack {// 用单个队列// 将前面n-1个元素弹出并加入底部private Queue<Integer> a;public MyStack() {a = new LinkedList<>();}public void push(int x) {// size-1int n = a.size();a.offer(x);while (n > 0) {a.offer(a.poll());n--;}}public int pop() {return a.poll();}public int top() {return a.peek();}public boolean empty() {return a.isEmpty();}
}

20. 有效的括号

public boolean isValid(String s) {// 输入:s = "()[]{}"//输出:trueHashMap<Character,Character> map = new HashMap<>();map.put('(',')');map.put('[',']');map.put('{','}');Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (ch == '(' || ch == '{' || ch == '[') {stack.push(map.get(ch));}// [()]// ])else if (stack.isEmpty() || ch != stack.pop()) {return false;}}// ([return stack.isEmpty();
}
  • Deque和Stack栈
public boolean isValid(String s) {// 输入:s = "()[]{}"//输出:trueHashMap<Character,Character> map = new HashMap<>();map.put('(',')');map.put('[',']');map.put('{','}');Deque<Character> stack = new LinkedList<>();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (ch == '(' || ch == '{' || ch == '[') {stack.push(map.get(ch));}// [()]// ])else if (stack.isEmpty() || ch != stack.pop()) {return false;}}// ([return stack.isEmpty();
}

1047. 删除字符串中的所有相邻重复项

  • 要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么
public String removeDuplicates(String s) {// 输入:"abbaca"//输出:"ca"Deque<Character> stack = new LinkedList<>();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (stack.isEmpty()) {stack.push(ch);continue;} else if (ch == stack.peek()) {stack.pop();continue;}stack.push(ch);}StringBuilder sb = new StringBuilder();while (!stack.isEmpty()) {sb.append(stack.pop());}return sb.reverse().toString();
}

150. 逆波兰表达式求值

public static int evalRPN(String[] tokens) {Deque<Integer> stack = new LinkedList<>();for (String token : tokens) {switch (token){case "+":stack.push(stack.pop()+stack.pop());break;case "-":stack.push(-1*(stack.pop()-stack.pop()));break;case "*":stack.push(stack.pop()*stack.pop());break;case "/":int a = stack.pop();int b = stack.pop();stack.push(b/a);break;default:stack.push(Integer.parseInt(token));}}return stack.pop();
}

http://www.ppmy.cn/news/1044818.html

相关文章

【java毕业设计】基于ssm+mysql+jsp的大学生兼职信息系统设计与实现(程序源码)-大学生兼职信息系统

基于ssmmysqljsp的大学生兼职信息系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于ssmmysqljsp的大学生兼职信息系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取方式…

element ui datePick时间日期一段时间,限制选择日期的范围

想限制只能选日期间隔为一年&#xff0c;联合选择器样式不好改&#xff0c;使用俩单独的 有两个办法限制 1.一个在外层使用form通过表单验证控制&#xff0c;出现错误提示&#xff08;由于是两个单独的组件&#xff0c;触发验证的方式又为单个失去焦点&#xff0c;所以俩组件…

图像检索技术研究:深度度量与深度散列在相似性学习中的应用比较与实践 - 使用Python与Jupyter环境

引言 在计算机视觉领域&#xff0c;图像检索是一个长期存在并持续受到研究者关注的重要话题。随着大数据时代的到来&#xff0c;如何高效、准确地从海量数据中检索到相似的图像成为一个巨大的挑战。传统的检索方法在大数据环境下表现不佳&#xff0c;而深度学习技术的崛起为图…

VALN-hybrid模式

实验拓扑及要求 一、实验思路 1.R1-R3按要求配置&#xff0c;R2不划分vlan使其全部都可以访问 2.交换机和路由器的交换机直连接口设为hybrid模式且R4-R6不带vlan标签访问路由器 3.交换机和交换机的两个直连接口设为hybrid模式且只允许R4-R6所在vlan标签通过 4.R4-R6只允许其…

Python可视化在量化交易中的应用(16)_Seaborn热力图

Seaborn中热力图的绘制方法 seaborn中绘制热力图使用的是sns.heatmap()函数&#xff1a; sns.heatmap(data,vmin,vmax,cmap,center,robust,annot,fmt‘.2g’,annot_kws,linewidths0,linecolor‘white’,cbar,cbar_kws,cbar_ax,square,xticklabels‘auto’,yticklabels‘auto’…

代码随想录算法训练营day38 | 70. 爬楼梯,509. 斐波那契数,746. 使用最小花费爬楼梯

目录 动态规划五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 类型&#xff1a;动态规划 难度&#xff1a;easy 思路&#xff1a; f&#xff08;n&#xff09; f&am…

如何更好地设计测试用例?

一般来说&#xff0c;软件产品需要满足的特征包括功能性、可靠性、易用性、效率性、可维护性和可移植性。 软件质量模型还有另外一个功能:当你不知道如何设计某个产品的测试用例或者需要补充什么用例时&#xff0c;可以参考软件质量模型的标准。 功能 软件提供满足显式和隐式…

学习笔记230810--get请求的两种传参方式

问题描述 今天写了一个对象方式传参的get请求接口方法&#xff0c;发现没有载荷&#xff0c;ip地址也没有带查询字符串&#xff0c;数据也没有响应。 代码展示 错误分析 实际上这里的query是对象方式带参跳转的参数名&#xff0c;而get方法对象方式传参的参数名是parmas 解…