编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。
该栈支持如下操作:push, pop, peek,和isEmpty
如果可以支持两个栈,我们可以每一次遍历栈1,将最小的元素放入栈2,把栈3作为搜索时的缓冲区
但是这里只能使用一个额外栈,那是不是就没有办法了呢?不是的
我们不需要反复搜索栈1来依次获得最小值,假设栈s是要排序的栈,栈r是已排序的栈
s = [5,10,7]
r = [12,8 ,3,1]
栈顶元素5在r中的正确位置应该是3的上面,我们可以先弹出5,反正5是无论如何都要从s压入r的,然后将12和8压入栈s,然后将5压入栈r
注意这是12和8没有在r中了,但是只要我们不改变它们在s中的顺序,重复上面的步骤,12和8一次从s弹出再压入r还是在5的上面,r依然是有序的。
时间复杂度为O(n^2),空间复杂度O(n)
import java.util.Stack;public class sort {public static Stack<Integer> sortStk(Stack<Integer> s) {Stack<Integer> r = new Stack<Integer>();while( !s.isEmpty() ) {int temp = s.pop();while ( !r.isEmpty() && r.peek() > temp) {s.push(r.pop());}r.push(temp);}return r;}
}
编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。相关推荐
- Java黑皮书课后题第3章:3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。随即产生一个整数0或1,分别表示
3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面 题目 题目概述 破题 代码 题目 题目概述 3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面 随即 ...
- 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3
某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门课程的成绩,编写程序,计算每名学生的平均成绩及名次.(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门 ...
- 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身.例如:153=13+53+33. 本题要求编写程序,计算所有N位水仙花数. 输入格式: 输入在一行中给出一个正整数N(3 ...
- vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤
想知道VC++ 6.0工具如何编写程序吗,可能有些朋友还不熟悉,我们一起去了解一下VC++ 6.0编写程序的详细步骤吧. VC++ 6.0编写程序的详细步骤 vc++6.0的菜单简洁,工具明了,这里以 ...
- Java黑皮书课后题第3章:*3.8(对三个整数排序)编写程序,提示用户输入三个整数,以非降序的形式显示这三个整数
*3.8(对三个整数排序)编写程序,提示用户输入三个整数,以非降序的形式显示这三个整数 题目 题目概述 破题 代码 如何理解值的互换 题目 题目概述 *3.8(对三个整数排序)编写程序,提示用户输入三 ...
- c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器
c#给定二维数组按升序排序 Problem: Write a program in 8086 microprocessor to sort numbers in ascending order in ...
- python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...
[填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...
- 【Java】用sort实现对数组的升序和降序排序
Java 用 sort 实现对数组的升序和降序排序 一.ArrayList 的升序与降序 二.数组升序 三.数组降序 方法一 方法二 一.ArrayList 的升序与降序 升序:Collections ...
- 实验七:掌握基本的MapReduce编程方法 (JAVA+Python实现)(编程实现文件合并和去重操作,编写程序实现对输入文件的排序,对给定的表格进行信息挖掘)
一.实验目的: 1. 理解MapReduce的工作机制: 2. 掌握基本的MapReduce编程方法 3. 重点理解map过程,shuffle过程和reduce过程 二.实验环境: Hadoop+Ec ...
最新文章
- 太慢不能忍!CPU又拿硬盘和网卡开刀了!
- HDU1402 A * B Problem Plus(FFT)
- Automake十分钟速成教程
- 修改 IIS 队列长度
- C++ 类和对象(三):构造函数补充、匿名对象、友元、内部类、类的static与const
- Java中CAS详解
- LeetCode 206. 反转链表
- mysql导入dat文件_MySql导入和抽取大数量级文件数据
- 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用
- Silverlight 2初尝及我的例子:Fanfou.com客户端——EatSilverlight
- badboy无法录制 浏览器版本过低请下载最新的Badboy
- Python入门基础-七、案例4 52周存钱挑战 #列表(list)#math 库#for循环#range()用法#函数的参数传递#datetime库
- android 自定义字体 ttf,Android利用TTF文件设置字体
- 【K8S etcd篇】部署etcd 3.4.14 集群
- Win10下IE无法打开网页的解决办法
- OROCOS之KDL(1)—— Linux环境搭建篇
- Excel合并单元格排序
- 全部40个博客网站排名
- SSD 4K对齐正确做法是这样!
- 【Android】基于BUILD.gn的源码构建
热门文章
- 【WinRAR】去除打开后弹出广告的方法
- 网页禁用F12或右键查看源代码
- 【无线通信基础与研究】
- iTunes for Windows 64bit 下载
- AECC 2015绿色版下载|adobe after effects cc 2015绿色版下载 v1
- 西门子S7-300PLC ModbusTCP通讯方法
- Arduino烧录bootloader,并作为ISP进行下载程序
- 利用MATLAB进行求导
- [power bi]calculate
- python 营销应用_随机森林算法入门(python),,它可以用于市场营销对客户