算法系列——逆置一个栈
来源:互联网 发布:华道数据催收工作好吗 编辑:程序博客网 时间:2024/06/05 23:39
题目描述
一个栈一次压入了1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,
解题思路
空间复杂度为O(n)
生成一个辅助栈,依次从原来栈中弹出压入辅助栈中,返回最后结果。
递归方法
不利用辅助栈,递归调用取得栈底元素的子函数然后将其压入原有栈中。空间复杂度为O(1),时间复杂度为O(n)
程序实现
public class Solution { /** * 逆置一个栈,O(n)时间,O(n)空间 * * @param stack * @return */ public Stack<Integer> reverseStack(Stack<Integer> stack) { Stack<Integer> res = new Stack<>(); if (stack == null || stack.isEmpty()) return res; while (!stack.isEmpty()) { res.add(stack.pop()); } return res; } /** * 逆置一个栈,O(n)时间,O(1)空间 * * @param stack * @return */ public Stack<Integer> reverseStack1(Stack<Integer> stack) { if (stack == null || stack.isEmpty()) return stack; int i = getAndRemoveBottomElement(stack); reverseStack1(stack); stack.push(i); return stack; } /** * 取得栈底元素 * * @param stack * @return */ private int getAndRemoveBottomElement(Stack<Integer> stack) { int result = stack.pop(); if (stack.isEmpty()) return result; int last = getAndRemoveBottomElement(stack); stack.push(result); return last; } public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); System.out.println(stack); System.out.println(new Solution().reverseStack1(stack)); }}
阅读全文
0 0
- 算法系列——逆置一个栈
- 算法系列—贪心算法
- 【机器学习系列】三硬币问题——一个EM算法和Gibbs Sampling的例子
- 数据挖掘系列(10)——卷积神经网络算法的一个实现
- 数据挖掘系列(10)——卷积神经网络算法的一个实现
- 【转】数据挖掘系列(10)——卷积神经网络算法的一个实现
- 数据挖掘系列(10)——卷积神经网络算法的一个实现
- 数据挖掘系列(10)——卷积神经网络算法的一个实现
- 数据挖掘系列(10)——卷积神经网络算法的一个实现
- 排序算法系列之(二)——冒泡排序名字最为形象的一个
- 数据挖掘系列(10)——卷积神经网络算法的一个实现
- 算法系列——排序算法总结
- (积累系列—算法)冒泡算法
- 算法系列——Permutations
- 算法系列——Combinations
- 算法系列——Candy
- 算法系列——Subsets
- 算法系列—堆排序
- springMVC配置说一二--------拦截器
- Ubuntu 16.04下Spark安装与开发环境搭建
- Linux下的tar压缩解压缩命令详解
- Redis初步整理
- Java 8的新特性
- 算法系列——逆置一个栈
- Java Web学习总结17: JSP中的九个内置对象
- 170905_Spring英文文档阅读(一)_2.2 Data Access/Integration_spring-tx
- RAC在LINUX上使用NFS安装前准备
- Java 数据结构(一)---排序(一) 插入排序
- MyBatis学习笔记
- AsyncTask 异步任务
- 电脑如果打不开jar文件的解决办法
- 微信公众号如何关联小程序-微信小程序开发-视频教程19