双栈排序 牛客网 程序员面试金典 C++ Python

  • 题目描述

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

  • 给定一个int[] numbers(C++中为vector&ltint>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到最后一个元素。

  • 测试样例:

  • [1,2,3,4,5]

  • 返回:[5,4,3,2,1]

C++

class TwoStacks {
public:
//run:7ms memory:480kvector<int> twoStacksSort(vector<int> numbers) {int n = numbers.size();if(n<=1)return numbers;stack<int> st1;stack<int> st2;int temp;for(int i=0;i<n;i++){temp = numbers[i];while(!st1.empty() && temp < st1.top()){st2.push(st1.top());st1.pop();}st1.push(temp);while(!st2.empty()){st1.push(st2.top());st2.pop();}}vector<int> v;while(!st1.empty()){v.push_back(st1.top());st1.pop();}return v;}
};

Python

class TwoStacks:
#run:116ms memory:5728kdef twoStacksSort(self, numbers):if None == numbers: return Noneif 1 == len(numbers): return numberstmp = Nones1 = []s2 = []for i in range(len(numbers)):tmp = numbers[i]while s1 and tmp < s1[- 1]:s2.append(s1[- 1])s1.pop()s1.append(tmp)while s2:s1.append(s2[ - 1]);s2.pop()while s1:s2.append(s1[-1])s1.pop()return s2

双栈排序 牛客网 程序员面试金典 C++ Python相关推荐

  1. 集合栈 牛客网 程序员面试金典 C++ Python

    集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...

  2. 原串反转 牛客网 程序员面试金典 C++ Python

    原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...

  3. 空格替换 牛客网 程序员面试金典 C++ Python

    空格替换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个方法,将字符串中的空格全部替换为"%20".假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实 ...

  4. 回文链表 牛客网 程序员面试金典 C++ Python

    回文链表 牛客网 程序员面试金典  C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...

  5. 整数转化 牛客网 程序员面试金典 C++ Python

    整数转化 牛客网 程序员面试金典 C++ Python 题目描述 编写一个函数,确定需要改变几个位,才能将整数A转变成整数B. 给定两个整数int A,int B.请返回需要改变的数位个数. 测试样例 ...

  6. 确定字符互异 牛客网 程序员面试金典 C++ Python

    确定字符互异 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniStri ...

  7. 无缓存交换 牛客网 程序员面试金典 C++ Python

    无缓存交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值. 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回 ...

  8. 平衡二叉树检查 牛客网 程序员面试金典 C++ Python

    平衡二叉树检查 牛客网 程序员面试金典 C++ Python 题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1. 给定指向树根结点的指针T ...

  9. 平分的直线 牛客网 程序员面试金典 C++ Python

    平分的直线 牛客网 程序员面试金典 C++ Python 题目描述 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B ...

最新文章

  1. 几行代码构建全功能的对象检测模型,他是如何做到的?
  2. Rook存储:Kubernetes中最优秀的存储
  3. 用PHP和Python生成短链接服务的字符串ID
  4. hive读取hdfs存放文件_Hive基本概念
  5. Java注释--单行注释、多行注释、文档注释
  6. jpg、gif、png-8、png-24的区别
  7. android style边界显示兼容问题,android – IDE“无法解析@ style/Theme.Appcompat”时使用v7兼容性支持主题...
  8. Atitit 封装的艺术 目录 1.1. 规范是不暴露特有的api 1 1.2. 方便理解,提升可读性 1 1.3. Atitit 提升可读性 数据结构特殊化专用api 比较通用的对象
  9. 检测磁盘smartmontools
  10. idea 设置重复代码检测
  11. 离散数学——自动生成真值表、主合取范式
  12. 技术转正及年终工作述职报告PPT模板
  13. 8类网线利弊_八类网线你用过吗?与六类、七类等网线有啥区别?
  14. 更换光猫后网速变慢的解决办法
  15. Tryhackme-Windows Exploitation Basics
  16. 收不到手机验证码怎么办
  17. 如何进入docker系统
  18. 从win7到win10的那些事~
  19. SwiftTips之LanguageAPI
  20. Gitlab 可以push但web端不显示文件

热门文章

  1. 牛逼!下一代 Docker 镜像构建神器
  2. OWASP TOP10 大主流漏洞原理和防范措施,易理解版
  3. 共赢商业市场:我负责使能、赋能,你负责客户成功
  4. maya餐具图片_MAYA动画场景制作
  5. 局域网服务器系统克隆,局域网批量“克隆(Ghost)”硬盘
  6. Hadoop权限管理使用什么组件(HA + Kerberos)
  7. 电气设计常用提示图标(自己画的)含高清原图下载地址
  8. 【程序人生】两个好消息:1万粉丝+周榜第四
  9. Socket与IO复习
  10. cpp 读写word的库