• [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<Int>
     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..<queue.count - 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<Int>()
      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  */
  • 相关阅读:
    morning
    周末,又见周末
    One Care, still Care
    Linux 下挂载硬盘的 方法
    Oracle 11g Alert log 文件位置的问题
    Oracle中 drop user 和 drop user cascade 的区别
    如何加快建 index 索引 的时间
    Oracle ADDM 自动诊断监视工具 介绍
    Vmware SERVER 简介
    Oracle Logminer 说明
  • 原文地址:https://www.cnblogs.com/strengthen/p/10204324.html
Copyright © 2020-2023  润新知