简单实现一下,熟悉一下写题目,这几天找找状态……huaji-6f8ff8999ff5ed9a.gif

P232. 栈实现队列

  1. package com.wztlink1013.problems.leetcode.editor.cn;
  2. // P232.用栈实现队列
  3. // P232.implement-queue-using-stacks
  4. //请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
  5. //
  6. // 实现 MyQueue 类:
  7. //
  8. //
  9. // void push(int x) 将元素 x 推到队列的末尾
  10. // int pop() 从队列的开头移除并返回元素
  11. // int peek() 返回队列开头的元素
  12. // boolean empty() 如果队列为空,返回 true ;否则,返回 false
  13. //
  14. //
  15. //
  16. //
  17. // 说明:
  18. //
  19. //
  20. // 你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
  21. //
  22. // 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
  23. //
  24. //
  25. //
  26. //
  27. // 进阶:
  28. //
  29. //
  30. // 你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。
  31. //
  32. //
  33. //
  34. //
  35. // 示例:
  36. //
  37. //
  38. //输入:
  39. //["MyQueue", "push", "push", "peek", "pop", "empty"]
  40. //[[], [1], [2], [], [], []]
  41. //输出:
  42. //[null, null, null, 1, 1, false]
  43. //
  44. //解释:
  45. //MyQueue myQueue = new MyQueue();
  46. //myQueue.push(1); // queue is: [1]
  47. //myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
  48. //myQueue.peek(); // return 1
  49. //myQueue.pop(); // return 1, queue is [2]
  50. //myQueue.empty(); // return false
  51. //
  52. //
  53. //
  54. //
  55. //
  56. //
  57. //
  58. // 提示:
  59. //
  60. //
  61. // 1 <= x <= 9
  62. // 最多调用 100 次 push、pop、peek 和 empty
  63. // 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)
  64. //
  65. // Related Topics 栈 设计
  66. // 👍 361 👎 0
  67. import java.util.Stack;
  68. public class P232ImplementQueueUsingStacks{
  69. public void main(String[] args) {
  70. MyQueue myQueue = new MyQueue();
  71. //本地调试需要将MyQueue类和主函数加上静态static修饰字
  72. //具体解释:https://www.cnblogs.com/dolphin0520/p/3799052.html
  73. myQueue.push(1); // queue is: [1]
  74. myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
  75. myQueue.pop();
  76. myQueue.peek();
  77. // myQueue.peek(); // return 1
  78. // myQueue.pop(); // return 1, queue is [2]
  79. // myQueue.empty(); // return false
  80. // System.out.println(myQueue);
  81. }
  82. //leetcode submit region begin(Prohibit modification and deletion)
  83. class MyQueue {
  84. Stack<Integer> stack_input = new Stack<>();
  85. Stack<Integer> stack_output = new Stack<>();
  86. /** Initialize your data structure here. */
  87. public MyQueue() {
  88. // Stack<Integer> stack_input = new Stack<>();
  89. // Stack<Integer> stack_output = new Stack<>();
  90. }
  91. /** Push element x to the back of queue. */
  92. public void push(int x) {
  93. stack_input.push(x);
  94. int temp = stack_input.size();
  95. if (stack_output.size() == 0) {
  96. for (int i=0; i<temp; i++){
  97. stack_output.push(stack_input.pop());
  98. }
  99. }
  100. }
  101. /** Removes the element from in front of queue and returns that element. */
  102. public int pop() {
  103. int temp = stack_input.size();
  104. if (stack_output.size() == 0) {
  105. for (int i=0; i<temp; i++){
  106. stack_output.push(stack_input.pop());
  107. }
  108. }
  109. return stack_output.pop();
  110. }
  111. /** Get the front element. */
  112. public int peek() {
  113. int temp = stack_input.size();
  114. if (stack_output.size() == 0) {
  115. for (int i=0; i<temp; i++){
  116. stack_output.push(stack_input.pop());
  117. }
  118. }
  119. return stack_output.peek();
  120. }
  121. /** Returns whether the queue is empty. */
  122. public boolean empty() {
  123. if (stack_input.size() == 0 && stack_output.size() == 0) {
  124. return true;
  125. }
  126. return false;
  127. }
  128. }
  129. /**
  130. * Your MyQueue object will be instantiated and called as such:
  131. * MyQueue obj = new MyQueue();
  132. * obj.push(x);
  133. * int param_2 = obj.pop();
  134. * int param_3 = obj.peek();
  135. * boolean param_4 = obj.empty();
  136. */
  137. //leetcode submit region end(Prohibit modification and deletion)
  138. }

P225. 队列实现栈

  1. package com.wztlink1013.problems.leetcode.editor.cn;
  2. // P225.用队列实现栈
  3. // P225.implement-stack-using-queues
  4. //请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。
  5. //
  6. // 实现 MyStack 类:
  7. //
  8. //
  9. // void push(int x) 将元素 x 压入栈顶。
  10. // int pop() 移除并返回栈顶元素。
  11. // int top() 返回栈顶元素。
  12. // boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
  13. //
  14. //
  15. //
  16. //
  17. // 注意:
  18. //
  19. //
  20. // 你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
  21. // 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
  22. //
  23. //
  24. //
  25. //
  26. // 示例:
  27. //
  28. //
  29. //输入:
  30. //["MyStack", "push", "push", "top", "pop", "empty"]
  31. //[[], [1], [2], [], [], []]
  32. //输出:
  33. //[null, null, null, 2, 2, false]
  34. //
  35. //解释:
  36. //MyStack myStack = new MyStack();
  37. //myStack.push(1);
  38. //myStack.push(2);
  39. //myStack.top(); // 返回 2
  40. //myStack.pop(); // 返回 2
  41. //myStack.empty(); // 返回 False
  42. //
  43. //
  44. //
  45. //
  46. // 提示:
  47. //
  48. //
  49. // 1 <= x <= 9
  50. // 最多调用100 次 push、pop、top 和 empty
  51. // 每次调用 pop 和 top 都保证栈不为空
  52. //
  53. //
  54. //
  55. //
  56. // 进阶:你能否实现每种操作的均摊时间复杂度为 O(1) 的栈?换句话说,执行 n 个操作的总时间复杂度 O(n) ,尽管其中某个操作可能需要比其他操作更长的
  57. //时间。你可以使用两个以上的队列。
  58. // Related Topics 栈 设计
  59. // 👍 291 👎 0
  60. import java.util.LinkedList;
  61. import java.util.Queue;
  62. public class P225ImplementStackUsingQueues{
  63. public void main(String[] args) {
  64. // Solution solution = new P225ImplementStackUsingQueues().new Solution();
  65. }
  66. //leetcode submit region begin(Prohibit modification and deletion)
  67. class MyStack {
  68. Queue<Integer> queue_input = new LinkedList<>();
  69. Queue<Integer> queue_output = new LinkedList<>();
  70. /** Initialize your data structure here. */
  71. public MyStack() {
  72. }
  73. /** Push element x onto stack. */
  74. public void push(int x) {
  75. queue_input.add(x);
  76. }
  77. /** Removes the element on top of the stack and returns that element. */
  78. public int pop() {
  79. int temp_2 = queue_input.size();
  80. for (int i=0; i<temp_2; i++) {
  81. queue_output.add(queue_input.remove());
  82. }
  83. int temp_3 = queue_output.size();
  84. for (int i=0; i<temp_3-1; i++) {
  85. queue_input.add(queue_output.remove());
  86. }
  87. return queue_output.remove();
  88. }
  89. /** Get the top element. */
  90. public int top() {
  91. int top = 0;
  92. int temp_4 = queue_input.size();
  93. for (int i=0; i<temp_4; i++) {
  94. queue_output.add(queue_input.remove());
  95. }
  96. int temp_5 = queue_output.size();
  97. for (int i=0; i<temp_5; i++) {
  98. if (i == temp_5-1) {
  99. top = queue_output.element();
  100. }
  101. queue_input.add(queue_output.remove());
  102. }
  103. return top;
  104. }
  105. /** Returns whether the stack is empty. */
  106. public boolean empty() {
  107. if (queue_input.size() == 0 && queue_output.size() == 0) {
  108. return true;
  109. }
  110. return false;
  111. }
  112. }
  113. /**
  114. * Your MyStack object will be instantiated and called as such:
  115. * MyStack obj = new MyStack();
  116. * obj.push(x);
  117. * int param_2 = obj.pop();
  118. * int param_3 = obj.top();
  119. * boolean param_4 = obj.empty();
  120. */
  121. //leetcode submit region end(Prohibit modification and deletion)
  122. }