终于碰到了一道,我稍微思考就会,不用看题库,又思考了的题了,可太难了~
题目
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证 *** 作合法,即保证pop *** 作时队列内已有元素。
数据范围: nle1000n≤1000
要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)
思路
我来讲一讲我的思路
首先要知道栈是先进后出,列表是先进先出
要想当链表,那自然是一个栈当尾,只进(表面看),称为栈1。一个表当头,只出,称为栈2
进的话比较简单,塞进去就好了。
出的怎么办呢?
应该让栈1里面最下面的变成栈2最上面的,也就是将栈1的按序移动到栈2。
但是怎么把握移动的时间节点呢?栈2啥时候不可以d出?自然是为空啦,所以可以在栈2为空的时候将栈1的移动过去。
但是进入好像没有o(1)?这咋办呢?樂
import java.util.Stack; public class Solution { Stackstack1 = new Stack (); Stack stack2 = new Stack (); public void push(int node) { stack1.add(node); } public int pop() { if(stack2.isEmpty()) { while(!stack1.isEmpty()) { stack2.add(stack1.pop()); } } return stack2.pop(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)