zoukankan      html  css  js  c++  java
  • 【程序员面试金典】面试题 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]
    

    说明:栈中的元素数目在[0, 5000]范围内。

    思路

    使用两个栈

    • push
      • 如果栈不为空并且新加入元素大于栈顶元素,则不断取出栈顶元素加入辅助栈,最后再将元素加入data栈,然后将辅助栈中的元素再重新放入data栈中
      • 否则直接放入data栈
    • pop
      • data栈不为空,直接pop
    • peek
      • 直接取出data栈顶元素
    • isEmpty
      • 返回data栈是否为空

    代码

    时间复杂度:O(n)
    空间复杂度:O(n)

    class SortedStack {
        stack<int> data;
        stack<int> help;
    public:
        SortedStack() {
    
        }
        
        void push(int val) {
            if (!data.empty() && val > data.top()) {
                while (!data.empty() && val > data.top()) {
                    help.push(data.top());
                    data.pop();
                }
                data.push(val);
                while (!help.empty()) {
                    data.push(help.top());
                    help.pop();
                }
            } else {
                data.push(val);
            }
        }
        
        void pop() {
            if (!data.empty()) data.pop();
        }
        
        int peek() {
            if (!data.empty()) return data.top();
            return -1;
        }
        
        bool isEmpty() {
            return data.empty();
        }
    };
    
  • 相关阅读:
    SpringCloud之Eureka注册中心原理及其搭建
    微服务架构及其概念
    SpringBoot(十六)-----Springboot整合JPA
    SpringBoot(十五)-----Springboot配合JDBCTemplate实现增删改查
    MYSQL安装报错 -- 出现Failed to find valid data directory.
    SpringBoot(十四)-----异常处理
    JQuery 隔行变色
    C#断开式连接
    C# 学生表的插入操作
    C#字符串
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/13170278.html
Copyright © 2011-2022 走看看