该栈支持如下操作: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;}
}

编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构(如数组)。相关推荐

  1. Java黑皮书课后题第3章:3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。随即产生一个整数0或1,分别表示

    3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面 题目 题目概述 破题 代码 题目 题目概述 3.14(游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面 随即 ...

  2. 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3

    某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门课程的成绩,编写程序,计算每名学生的平均成绩及名次.(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号.姓名.3门 ...

  3. 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

    水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身.例如:153=13+53+33. 本题要求编写程序,计算所有N位水仙花数. 输入格式: 输入在一行中给出一个正整数N(3 ...

  4. vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤

    想知道VC++ 6.0工具如何编写程序吗,可能有些朋友还不熟悉,我们一起去了解一下VC++ 6.0编写程序的详细步骤吧. VC++ 6.0编写程序的详细步骤 vc++6.0的菜单简洁,工具明了,这里以 ...

  5. Java黑皮书课后题第3章:*3.8(对三个整数排序)编写程序,提示用户输入三个整数,以非降序的形式显示这三个整数

    *3.8(对三个整数排序)编写程序,提示用户输入三个整数,以非降序的形式显示这三个整数 题目 题目概述 破题 代码 如何理解值的互换 题目 题目概述 *3.8(对三个整数排序)编写程序,提示用户输入三 ...

  6. c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器

    c#给定二维数组按升序排序 Problem: Write a program in 8086 microprocessor to sort numbers in ascending order in ...

  7. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

  8. 【Java】用sort实现对数组的升序和降序排序

    Java 用 sort 实现对数组的升序和降序排序 一.ArrayList 的升序与降序 二.数组升序 三.数组降序 方法一 方法二 一.ArrayList 的升序与降序 升序:Collections ...

  9. 实验七:掌握基本的MapReduce编程方法 (JAVA+Python实现)(编程实现文件合并和去重操作,编写程序实现对输入文件的排序,对给定的表格进行信息挖掘)

    一.实验目的: 1. 理解MapReduce的工作机制: 2. 掌握基本的MapReduce编程方法 3. 重点理解map过程,shuffle过程和reduce过程 二.实验环境: Hadoop+Ec ...

最新文章

  1. 《人工智能爱好者俱乐部》祝大家元旦快乐!
  2. instant.now时区不正确_Centos8如何更改时区
  3. 1、虚拟机内存管理、运行时数据区、线程共享区、Java堆、新生代、老年代、Eden区域分配、方法区、线程独占区、虚拟机栈
  4. Android开发之设置Edittext小数点后两位以及限制位数同时使用
  5. 第七届蓝桥杯省赛---蚂蚁感冒
  6. ICCV 2019 | 旷视研究院提出VANet:具备视角感知力的车辆重识别网络
  7. Tsung压力测试工具的搭建和使用,配置。
  8. Struts2基本包作用详解
  9. ssm大型分布式商城项目实战视频教程下载java分布式开发教程
  10. 解除网页复制限制的Chrome插件-SuperCopy
  11. pip 使用国内镜像源的介绍
  12. Kaggle Quora-如何快速进行数据分析 #0
  13. 分享一个HTML【叶子特效】,确切一点 是 落叶特效(完整代码)
  14. 16种css3动画弹出遮罩层
  15. 自定义Dialog 实现 仿网易云音乐的隐私条款声明弹框
  16. python 从大到小循环_跟老齐学Python之关于循环的小伎俩
  17. 日“隼鸟二号”首次降落“龙宫”取样
  18. 常见的服务器架构入门:从单体架构、EAI 到 SOA 再到微服务和 ServiceMesh
  19. HTML好看个人主页展示开源源码
  20. Java注入bean的方式_多种方式实现Spring的Bean注入

热门文章

  1. ipad如何分屏_iPad手写笔记软件,首选notability
  2. 2020上海交大计算机考研真题,上海交大 2020考研真题 回忆版
  3. Python提示 TypeError: super(type, obj): obj must be an instance or subtype of type问题
  4. 可以播放所有dvd光盘的蓝光播放器Blu-ray Player for Mac
  5. 自监督模型---概述
  6. 会员管理系统实战开发教程(一)
  7. Windows7农行网银页面无法显示问题的解决方法
  8. mysql 年龄段分组_SQL语句查询年龄分段分组查询
  9. 线路子区段划分示意图
  10. 微信小程序悬浮窗功能实现