[Swift]LeetCode225. 用队列实现栈 | Implement Stack using Queues

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10204324.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Implement the following operations of a stack using queues.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • empty() -- Return whether the stack is empty.

Example:

MyStack stack = new MyStack();

stack.push(1);
stack.push(2);  
stack.top();   // returns 2
stack.pop();   // returns 2
stack.empty(); // returns false

Notes:

  • You must use only standard operations of a queue -- which means only push to backpeek/pop from frontsize, and is empty operations are valid.
  • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
  • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

使用队列实现栈的下列操作:

  • push(x) -- 元素 x 入栈
  • pop() -- 移除栈顶元素
  • top() -- 获取栈顶元素
  • empty() -- 返回栈是否为空

注意:

  • 你只能使用队列的基本操作-- 也就是 push to backpeek/pop from frontsize, 和 is empty 这些操作是合法的。
  • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
  • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

8ms

 1 class MyStack {
 2 
 3     var stack: Array
 4     
 5     /** Initialize your data structure here. */
 6     init() {
 7         stack = []
 8     }
 9     
10     /** Push element x onto stack. */
11     func push(_ x: Int) {
12         stack.append(x)
13     }
14     
15     /** Removes the element on top of the stack and returns that element. */
16     func pop() -> Int {
17         return stack.removeLast()
18     }
19     
20     /** Get the top element. */
21     func top() -> Int {
22         return stack.last!
23     }
24     
25     /** Returns whether the stack is empty. */
26     func empty() -> Bool {
27         return stack.isEmpty
28     }
29 
30 }
31 
32 /**
33  * Your MyStack object will be instantiated and called as such:
34  * let obj = MyStack()
35  * obj.push(x)
36  * let ret_2: Int = obj.pop()
37  * let ret_3: Int = obj.top()
38  * let ret_4: Bool = obj.empty()
39  */

8ms

 1 class MyStack {
 2 
 3     fileprivate var array : [Int]
 4     
 5     /** Initialize your data structure here. */
 6     init() {
 7         array = [Int]()
 8     }
 9     
10     /** Push element x onto stack. */
11     func push(_ x: Int) {
12         array.append(x)
13     }
14     
15     /** Removes the element on top of the stack and returns that element. */
16     func pop() -> Int {
17         return array.removeLast()
18     }
19     
20     /** Get the top element. */
21     func top() -> Int {
22         return array.last!
23     }
24     
25     /** Returns whether the stack is empty. */
26     func empty() -> Bool {
27         return array.isEmpty
28     }
29 }
30 
31 /**
32  * Your MyStack object will be instantiated and called as such:
33  * let obj = MyStack()
34  * obj.push(x)
35  * let ret_2: Int = obj.pop()
36  * let ret_3: Int = obj.top()
37  * let ret_4: Bool = obj.empty()
38  */
39  

12ms

 1 class MyStack {
 2 
 3     private var queue = [Int]()
 4 
 5     /** Initialize your data structure here. */
 6     init() {
 7 
 8     }
 9 
10     /** Push element x onto stack. */
11     func push(_ x: Int) {
12         queue.append(x)
13         for _ in 0..1 {
14             queue.append(queue.removeFirst())
15         }
16     }
17 
18     /** Removes the element on top of the stack and returns that element. */
19     func pop() -> Int {
20         return queue.removeFirst()
21     }
22 
23     /** Get the top element. */
24     func top() -> Int {
25         return queue.first!
26     }
27 
28     /** Returns whether the stack is empty. */
29     func empty() -> Bool {
30         return queue.isEmpty
31     }
32 }

16ms

  1 //: [Previous](@previous)
  2 
  3 import Foundation
  4 
  5 
  6 class MyQueue {
  7     
  8     var array = Array()
  9     
 10     /** Initialize your data structure here. */
 11     init() {
 12         array = []
 13     }
 14     
 15     /** Push element x to the back of queue. */
 16     func push(_ x: Int) {
 17         array.append(x)
 18     }
 19     
 20     /** Removes the element from in front of queue and returns that element. */
 21     func pop() -> Int {
 22         let last = array.first!
 23         array.remove(at: 0)
 24         return last
 25     }
 26     
 27     /** Get the front element. */
 28     func peek() -> Int {
 29         return array.first!
 30     }
 31     
 32     /** Returns whether the queue is empty. */
 33     func empty() -> Bool {
 34         return array.count == 0
 35     }
 36     
 37     func size() -> Int {
 38         
 39         return array.count;
 40     }
 41 }
 42 
 43 class MyStack {
 44     
 45     var queue: MyQueue?
 46     var helpQueue: MyQueue?
 47     /** Initialize your data structure here. */
 48     
 49     init() {
 50         queue = MyQueue.init()
 51         helpQueue = MyQueue.init()
 52     }
 53     
 54     /** Push element x onto stack. */
 55     func push(_ x: Int) {
 56         queue?.push(x)
 57     }
 58     
 59     /** Removes the element on top of the stack and returns that element. */
 60     func pop() -> Int {
 61         
 62         shift()
 63         let popObj = queue?.pop()
 64         swap()
 65         return popObj!
 66     }
 67     
 68     /** Get the top element. */
 69     func top() -> Int {
 70         shift()
 71         let popObj = queue!.peek()
 72         helpQueue?.push(queue!.pop())
 73         swap()
 74         return popObj
 75     }
 76     
 77     /** Returns whether the stack is empty. */
 78     func empty() -> Bool {
 79         
 80         return queue!.empty() && helpQueue!.empty();
 81     }
 82     
 83     func swap() {
 84         
 85         (queue, helpQueue) = (helpQueue, queue)
 86     }
 87     
 88     func shift() {
 89         
 90         while queue?.size() != 1 {
 91             
 92             helpQueue?.push(queue!.pop())
 93         }
 94     }
 95     
 96 }
 97 
 98 /**
 99  * Your MyStack object will be instantiated and called as such:
100  * let obj = MyStack()
101  * obj.push(x)
102  * let ret_2: Int = obj.pop()
103  * let ret_3: Int = obj.top()
104  * let ret_4: Bool = obj.empty()
105  */

 

转载于:https://www.cnblogs.com/strengthen/p/10204324.html

你可能感兴趣的:([Swift]LeetCode225. 用队列实现栈 | Implement Stack using Queues)