面试题 03.05:栈排序

简介: 面试题 03.05:栈排序

题目

题目链接

栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。

示例1:

输入:
["SortedStack", "push", "push", "peek", "pop", "peek"]
[[], [1], [2], [], [], []]
 输出:
[null,null,null,1,null,2]

示例2:

输入: 
["SortedStack", "pop", "pop", "push", "pop", "isEmpty"]
[[], [], [], [1], [], []]
 输出:
[null,null,null,null,null,true]

解题

方法一:辅助栈

就是在leetcode-232:用栈实现队列的思路上稍加改动

st1是一个单调递减栈

st2是辅助栈

当输入val的时候,将小于val的暂时放入st2中,然后将val放入st1中,再把st2的放回来。

这样子就可以保持st1的单调递减

class SortedStack {
public:
    stack<int> st1;
    stack<int> st2;
    SortedStack() {
    }
    void push(int val) {
        while(!st1.empty()&&st1.top()<val){
            st2.push(st1.top());
            st1.pop();
        }
        st1.push(val);
        while(!st2.empty()){
            st1.push(st2.top());
            st2.pop();
        }
    }
    void pop() {
        if(!st1.empty()){
            st1.pop();
        }
    }
    int peek() {
        if(!st1.empty()){
            return st1.top();
        }
        else return -1;
    }
    bool isEmpty() {
        return st1.empty();
    }
};
相关文章
|
5月前
|
存储 Java 编译器
【面试知识】Java内存分配之常量池、堆、栈
【面试知识】Java内存分配之常量池、堆、栈
|
6月前
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
7月前
【栈和队列面试题】用栈实现队列(动图解析更清晰)
【栈和队列面试题】用栈实现队列(动图解析更清晰)
|
7月前
|
存储
【栈与队列面试题】用队列实现栈(动图演示)
【栈与队列面试题】用队列实现栈(动图演示)
|
7月前
|
存储
【栈与队列面试题】有效的括号(动图演示)
【栈与队列面试题】有效的括号(动图演示)
|
5月前
|
算法 容器
【算法训练营】队列合集(2) 2073. 买票需要的时间 || 面试题 03.04. 化栈为队 ||
【算法训练营】队列合集(2) 2073. 买票需要的时间 || 面试题 03.04. 化栈为队 ||
62 0
|
7月前
|
存储 Java 调度
Java 最常见的面试题:队列和栈是什么?有什么区别?
Java 最常见的面试题:队列和栈是什么?有什么区别?
|
3月前
|
存储 算法 调度
【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习
【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习
37 0
|
4月前
|
设计模式 消息中间件 Java
面试官:什么是JIT、逃逸分析、锁消除、栈上分配和标量替换?
面试官:什么是JIT、逃逸分析、锁消除、栈上分配和标量替换?
539 1
|
4月前
|
存储 程序员 C++
面试题:C++堆和栈的区别?
面试题:C++堆和栈的区别?
25 0