【leetcode 面试题 03.05. 】栈排序Java代码讲解

12.25 面试题 03.05. 栈排序

理解Java Stack 类因为要用到
1 boolean empty() 测试堆栈是否为空。
2 Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element) 把项压入堆栈顶部。
5 int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。

首先需要理解题意,输入的第一个数组是要依次执行的方法,第二行则为所执行方法的参数,本题主要是在元素入栈时将元素排序,以保证栈中最小元素位于栈顶。

栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:pushpoppeekisEmpty。当栈为空时,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]
//利用辅助栈来解决排序问题
class SortedStack {
    Stack<Integer> stack;
    Stack<Integer> tempStack; //辅助栈用来让stack栈元素为最小元素在栈顶
    public SortedStack() {
        stack = new Stack<>();
        tempStack = new Stack<>();
    }
    
    public void push(int val) {
        //如果栈不为空,并且栈顶元素小于要进栈的元素,则让栈中元素转移到辅助栈中
        while(stack.isEmpty() == false && stack.peek() < val){
            tempStack.push(stack.pop());
        }
        //将进栈元素入栈
        stack.push(val);
        //将辅助栈中的元素重新入栈
        while(tempStack.isEmpty() == false){
            stack.push(tempStack.pop());
        }
    }
    
    public void pop() {
        if(stack.isEmpty() == false){
            stack.pop();
        }
    }
    
    public int peek() {
        if(stack.isEmpty() == false){
            return stack.peek();
        }else{
            return -1;
        }
    }
    
    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();
 */

你可能感兴趣的:(算法练习,leetcode,java,python)