左神算法:用一个栈实现另一个栈的排序(Java版)
本题源自左神《程序员面试代码指南》“用一个栈实现另一个栈的排序”题目。
题目
在一个栈中元素的类型为整型,现在想将该栈从栈顶到栈底按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请其他变量,但是不能申请额外的数据结构。
解答
将待排序的栈记为 stack, 辅助栈记为 help。 在 stack 上执行 pop 操作,弹出的元素记为 cur。
- 如果 cur 小于等于 help 的栈顶元素,则将 cur 直接压入 help
- 如果 cur 大于 help 的栈顶元素,则将 help 的元素逐一弹出,逐一压入 stack,直到 cur 小于或等于 help 的栈顶元素,再将 cur 压入 help
一直执行以上操作,直到 stack 中的全部元素都压入到 help 栈中(此时从栈顶到栈底:有小到大),最后将help栈中的元素逐一压入stack,即可完成排序。
代码
import java.util.Stack;public class Main {public static void sortStackByStack(Stack<Integer> stack) {Stack<Integer> help = new Stack<Integer>();while (!stack.isEmpty()) {int cur = stack.pop();while (!help.isEmpty() && help.peek() < cur) {stack.push(help.pop());}help.push(cur);}while (!help.isEmpty()) {stack.push(help.pop());}}public static void main(String[] args) {Stack<Integer> stack = new Stack<Integer>();stack.push(3);stack.push(1);stack.push(6);stack.push(2);stack.push(5);stack.push(4);sortStackByStack(stack);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}
}
输出:
6
5
4
3
2
1
左神算法:用一个栈实现另一个栈的排序(Java版)相关推荐
- 左神算法:求最大子矩阵的大小(Java版)
本题来自左神<程序员面试代码指南>"求最大子矩阵的大小"题目. 题目 给定一个整型矩阵 map,其中的值只有0和1两种,求其中全是1的所有矩形区域中,最大的矩形区域为1 ...
- 左神算法:最大值减去最小值小于或等于num的子数组的数量(Java版)
本题来自左神<程序员面试代码指南>"最大值减去最小值小于或等于num的子数组的数量"题目. 题目 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: ...
- 左神算法:单调栈结构(Java版)
本题来自左神<程序员面试代码指南>"单调栈结构"题目. 题目 给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小 ...
- 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
本题来自左神<程序员面试代码指南>"用栈来求解汉诺塔问题"题目. 题目 限制后的汉诺塔问题如下: 限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧, ...
- 左神算法:判断 t1 树中是否有与 t2 树拓扑结构完全相同的子树(Java版)
本题来自左神<程序员代码面试指南>"判断 t1 树中是否有与 t2 树拓扑结构完全相同的子树"题目. 题目 给定彼此独立的两棵树头节点分别为 t1 和 t2,判断 t1 ...
- 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)
本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...
- 左神算法:将搜索二叉树转换成双向链表(Java版)
本题来自左神<程序员代码面试指南>"将搜索二叉树转换成双向链表"题目. 题目 对二叉树的节点来说,有本身的值域,有指向左孩子节点和右孩子节点的两个指针:对双向链表的节点 ...
- 左神算法:将单链表的每K个节点之间逆序(Java版)
本题来自左神<程序员代码面试指南>"将单链表的每K个节点之间逆序"题目. 题目 给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K 个节点之间逆序,如果 ...
- 左神算法:两个单链表相交的一系列问题(链表是否有环 / 两无环链表是否相交 / 两有环链表是否相交)
本题来自左神<程序员代码面试指南>"两个单链表相交的一系列问题"题目. 题目 在本题中,单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, ...
最新文章
- 在Substance Designer中创建砖墙视频教程
- openstack登陆dashboard提示认证发生错误
- php for windows二进制包,PHP5ForWindowsVC9-x865.4.3安装版
- Run-time Settings--General--Run Logic
- 【JS新手教程】LODOP打印复选框选中的任务或页数
- python--编码问题
- WebKit新特性WebGL
- Maximum Score After Splitting a String
- python机器学习之物体识别
- 平安银行网银助手官方版
- plt是什么格式文件
- android 拍照和选择相册图片剪切
- linux mint五笔输入法,Linux Mint安装ibus五笔和拼音输入法简明教程
- 【JTAG、SBW、BSL】MSP430的BSL
- 华为运营商级路由器配置示例 | 公网IPv4 over SRv6 TE Policy
- FL Studio21水果软件最新中文版安装教程
- 《如果你想过1%的生活》 - 读后感
- WARNING: [Labtools 27-3413] vivado报错调试界面无信号无波形解决方法
- 关于别名(alias)的尴尬
- pdf横向打印java_java通过html生成pdf,支持css和图片以及横向打印