理解Java Stack 类因为要用到
1 boolean empty() 测试堆栈是否为空。
2 Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element) 把项压入堆栈顶部。
5 int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。
首先需要理解题意,输入的第一个数组是要依次执行的方法,第二行则为所执行方法的参数,本题主要是在元素入栈时将元素排序,以保证栈中最小元素位于栈顶。
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:
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]
//利用辅助栈来解决排序问题
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();
*/