9题目描述:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
解析:
1.定义两个栈,一个栈负责进入,一个栈负责出
2.当有元素进入时,第一个栈后面加入,当有元素出队列的时候,分为三种情况
(1)两个栈都是空栈,则证明是空队列
(2)第一个栈有元素,第二个栈没有元素,把第一个栈的元素全部出栈,放入第二个栈,第二个栈出栈
(3)第二个栈还有元素,则第二个栈出栈
Java:
class CQueue {
LinkedList<Integer> stack1;
LinkedList<Integer> stack2;
public CQueue() {
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
}
public void appendTail(int value) {
stack1.add(value);
}
public int deleteHead() {
if (stack2.isEmpty()) {
if(stack1.isEmpty()) {
return -1;
}
while (!stack1.isEmpty()) {
stack2.add(stack1.pop());
}
return stack2.pop();
} else {
return stack2.pop();
}
}
}
JavaScript:
var CQueue = function() {
this.stack1 = [];
this.stack2 = [];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.stack1.push(value);
return null;
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if(!(this.stack1.length || this.stack2.length)) {
return -1;
}
if(!this.stack2.length) {
while(this.stack1.length) {
let val = this.stack1.pop();
this.stack2.push(val);
}
}
return this.stack2.pop();
};
30题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
Java:
class MinStack {
Stack<Integer> sk1;
Stack<Integer> sk2;
/** initialize your data structure here. */
public MinStack() {
sk1=new Stack<Integer>();
sk2=new Stack<Integer>();
}
public void push(int x) {
sk1.push(x);
if(sk2.empty()||sk2.peek()>=x)
sk2.push(x);
}
public void pop() {
var val=sk1.pop();
if(val.equals(sk2.peek()))
sk2.pop();
}
public int top() {
return sk1.peek();
}
public int min() {
return sk2.peek();
}
}
JavaScript:
var MinStack = function() {
this.stack = []
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function(x) {
this.stack.push(x)
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
this.stack.pop()
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.stack[this.stack.length - 1]
};
/**
* @return {number}
*/
MinStack.prototype.min = function() {
return Math.min(...this.stack)
};