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

  • 题目描述

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

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

  • 测试样例:

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

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

C++

class TwoStacks {
public:
//run:7ms memory:480k
vector<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:5728k
def twoStacksSort(self, numbers):
if None == numbers: return None
if 1 == len(numbers): return numbers
tmp = None
s1 = []
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 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. C++ //run:5ms memeory ...

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

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

  4. 奇偶位交换 牛客网 程序员面试金典 C++ Python

    奇偶位交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写程序交换一个数的二进制的奇数位和偶数位.(使用越少的指令越好) 给定一个int x,请返回交换后的数int. 测试样例: 10 ...

  5. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

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

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

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

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

  8. 高度最小的BST 牛客网 程序员面试金典 C++ Python

    高度最小的BST 牛客网 程序员面试金典 C++ Python 题目描述 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树. 给定一个有序序列int[] val ...

  9. 链表分割 牛客网 程序员面试金典 C++ Python

    链表分割 牛客网 程序员面试金典 C++ Python 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* p ...

随机推荐

  1. Ubuntu 引导修复

    Ubuntu 引导修复 前言 最近还在看 Docker 的教程,看到了"跨宿主机网络通信"的一节,于是想到去 Ubuntu 中 实践一番.结果发现 Ubuntu 进不去了.由于考虑 ...

  2. .Net Core with 微服务 - 分布式事务 - 可靠消息最终一致性

    前面我们讲了分布式事务的2PC.3PC , TCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一 ...

  3. Jmeter系列(36)- Access Log Sampler

    简介 Access Log Sampler 是个非常有用的工具,可以收集和分析真实用户操作的数据,并可用于流量分析.常见的就是我们的nginx的access.log 日志 使用 access.log ...

  4. python刷题第四周

    本周有所收获的题目: 第一题: 第4章-17 水仙花数(20 分) (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身. 例如:153=1×1×1+5×5×5 ...

  5. 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的 | 百篇博客分析OpenHarmony源码 | v12.04

    百篇博客系列篇.本篇为: v12.xx 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有 ...

  6. P7408-[JOI 2021 Final]ダンジョン 3【贪心,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P7408 题目大意 一个有\(n+1\)层的地牢,从\(i\)到\(i+1\)层要\(A_i\)点能量,第\(i\) ...

  7. 如何一次性add library to classpath

    前言:导入项目时,时常需要手动导包,提示"add library to classpath",需要一个个找报红的类 点击添加本地项目包

  8. python class自身返回值研究

    在python中,如果你写了这样一串代码: import datetime a = datetime.date(2021, 9, 1) b = "2021-09-01" print ...

  9. JVM学习笔记——方法区

    方法区 Method Area 方法区在逻辑上属于堆的一部分,但可以看做是一块独立于 Java 堆的内存空间.所有的字段和方法字节码,以及一些特殊的方法,如构造函数,接口代码在此定义.所有定义方法的信 ...

  10. 使用CEF(一)— 起步

    使用CEF(一)- 起步 介绍 Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Li ...