zoukankan      html  css  js  c++  java
  • [编程题] lc:[面试题 0305 栈排序

    [编程题] lc:面试题 03.05. 栈排序

    题目描述

    image-20200724104917976

    输入输出

    image-20200724104932702

    思路

    主要思路:

    ​ 利用一个辅助栈来帮助在插入一个元素的时候进行排序,使得我们的主栈内元素始终是有序的(栈底到栈顶大到小),当push一个元素到主栈的时候,实在先看主栈栈顶元素。

    • 如果栈顶元素小于当前val,利用辅助栈将主栈栈顶元素先压入辅助栈,看此时的主栈的栈顶元素与要插入元素val的大小,满足栈顶元素大于val了的话,就可以把val放入到主栈中了、
    • 把val放入主栈后,我们需要从临时栈中再把元素pop出压入主栈,

    注:主要就是在插入元素的过程中,主栈的元素都是比val大,临时栈都比val小。

    Java代码

    import java.util.*;
    
    
    //思想,在插入的时候就循环检测主栈元素栈顶,要求主栈元素均大于val,辅助栈均小于val.
    class SortedStack {
    
        //初始栈
        Deque<Integer> stack;
        //临时栈
        Deque<Integer> tempStack;
    
        public SortedStack() {
           stack = new LinkedList<Integer>();
            tempStack = new LinkedList<Integer>();
        }
        
        public void push(int val) {
            if(stack.isEmpty()){
                stack.push(val);
            }else{
                //这里必须是循环多次移动比较栈顶元素的情况
                while(!stack.isEmpty() && val> stack.peek()){
                    tempStack.push(stack.pop());  //把这个主栈栈顶元素拿出放入临时栈;再继续比较主栈新的栈顶和val
                }
                //退出上述while就找到了val可以放入到主栈的位置
                stack.push(val);
                //此时把临时栈中的元素都拿回来。
                while(!tempStack.isEmpty()){
                    stack.push(tempStack.pop());
                }
            }
        }
        
        public void pop() {
            if(stack.isEmpty()){
                return;
            }
            //直接pop
            stack.pop();
    
        }
        
        public int peek() {
            if(stack.isEmpty()){
                return -1;
            }else{
                return stack.peek();
            }
        }
        
        public boolean isEmpty() {
            return stack.isEmpty();
        }
    }
    
    /**
     * Your SortedStack object will be instantiated and called as such:
     * SortedStack obj = new SortedStack();
     * obj.push(val);
     * obj.pop();
     * int param_3 = obj.peek();
     * boolean param_4 = obj.isEmpty();
     */
    

    时间复杂度

    最坏O(n)

    image-20200724105802236

  • 相关阅读:
    Java Swing打猎射击游戏源码
    php实现在线下载程序安装包功能
    WP
    双人对战的球类游戏IOS源码
    非常不错的新闻客户端应用安卓源码
    创业建议:如何写挖人邮件
    wp8路线跟踪应用源码详细说明
    wp版笔记本应用源码
    旅游风景展示应用源码iPad版
    bitset优化背包
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13370794.html
Copyright © 2011-2022 走看看