双栈排序 牛客网 程序员面试金典 C++ Python
双栈排序 牛客网 程序员面试金典 C++ Python
题目描述
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。
给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到最后一个元素。
测试样例:
[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相关推荐
- 集合栈 牛客网 程序员面试金典 C++ Python
集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...
- 原串反转 牛客网 程序员面试金典 C++ Python
原串反转 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniS ...
- 空格替换 牛客网 程序员面试金典 C++ Python
空格替换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个方法,将字符串中的空格全部替换为"%20".假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实 ...
- 回文链表 牛客网 程序员面试金典 C++ Python
回文链表 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...
- 整数转化 牛客网 程序员面试金典 C++ Python
整数转化 牛客网 程序员面试金典 C++ Python 题目描述 编写一个函数,确定需要改变几个位,才能将整数A转变成整数B. 给定两个整数int A,int B.请返回需要改变的数位个数. 测试样例 ...
- 确定字符互异 牛客网 程序员面试金典 C++ Python
确定字符互异 牛客网 程序员面试金典 C++ Python 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同.这里我们要求不允许使用额外的存储结构. 给定一个string iniStri ...
- 无缓存交换 牛客网 程序员面试金典 C++ Python
无缓存交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值. 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回 ...
- 平衡二叉树检查 牛客网 程序员面试金典 C++ Python
平衡二叉树检查 牛客网 程序员面试金典 C++ Python 题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1. 给定指向树根结点的指针T ...
- 平分的直线 牛客网 程序员面试金典 C++ Python
平分的直线 牛客网 程序员面试金典 C++ Python 题目描述 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B ...
最新文章
- 几行代码构建全功能的对象检测模型,他是如何做到的?
- Rook存储:Kubernetes中最优秀的存储
- 用PHP和Python生成短链接服务的字符串ID
- hive读取hdfs存放文件_Hive基本概念
- Java注释--单行注释、多行注释、文档注释
- jpg、gif、png-8、png-24的区别
- android style边界显示兼容问题,android – IDE“无法解析@ style/Theme.Appcompat”时使用v7兼容性支持主题...
- Atitit 封装的艺术 目录 1.1. 规范是不暴露特有的api	1 1.2. 方便理解,提升可读性	1 1.3. Atitit 提升可读性 数据结构特殊化专用api 比较通用的对象
- 检测磁盘smartmontools
- idea 设置重复代码检测
- 离散数学——自动生成真值表、主合取范式
- 技术转正及年终工作述职报告PPT模板
- 8类网线利弊_八类网线你用过吗?与六类、七类等网线有啥区别?
- 更换光猫后网速变慢的解决办法
- Tryhackme-Windows Exploitation Basics
- 收不到手机验证码怎么办
- 如何进入docker系统
- 从win7到win10的那些事~
- SwiftTips之LanguageAPI
- Gitlab 可以push但web端不显示文件