Leetcode 30 천도위, Week 2 Day 3, Min Stack, in Swift

7839 단어 Swiftleetcode
이마 텐야 시교 stack 有關係

제목


  • 도전 페이지 - h tps : // / ㅇ t 여기. 코 m / 에 xp ぉ 레 / 훗 아츠레 d / 카 rd / 30-다 y-ぇ에 t ぢん g ちゃんげんげ / 529 / ぇえ k 2 / 3292 /
  • 제목 원 페이지 - 155. Min Stack

  • 사유



    간도 stack유형적 實作,直覺是想到用 linked list
    유대 동시 수요추적 최소值、所以在 node 的基本實作中就加上一個 minValue 屬性.

    용 Linked List 實作部分 Stack ADT


  • ADT: 추상 자료형별, Abstract Data Type
  • Stack ADT - htps //w w. 쓰리아 ls Poin t. 이 m / s ck-a dt-in-da-st st c 얽힌 s

  • Linked List 實作



    Stack 유토개 기본 특성:
  • 수요가이상 쾌속적 취적 정상적
  • 이제정부적 值, 수요가이지도 신적 頂部的值

  • 因此在串 linked list 的時候, 新的值 혹은 說是 node 必須放出最前面而不是 最後面. 인위 單向鏈結 (singly linked list)적 특성, 是無法回溯前一個 node . 부과반연가가이 實作雙向鏈結只是不想把解法弄的那麼複雜.

    추월 최소 值



    於題題目期望每一個 method 的動作都是 constant time (O(1)) , 白話說就是在 집행적 시후희망 你不要動用到任何 loop .

    인此,在每一次 push 적시후, 취수요 비교 신적 值和最小值, 並紀錄下來比較出來的最新最小值.而這樣子 做會有兩個好處.
  • 이제 top 절제적 시후, 불수요 재중신거문 최소 值.
  • 因乐有步紀錄最小值, 因此可以像是 top()

  • 자료 상당한 부분, 원처 유상도 금방 외 1개 진열 추추 최소 值, 但是這樣子 수요 另外 1개 變數來追い, 放兩邊管就易會產生 問題, 因此把它 병입 Node.這樣就可以讓 peek() 也可以享受到像是 getMin() 一樣的好處.

    절묘한 과실



    이원시적 인위 沒有變更的 가능성, 所以這邊就全部宣告為 top()
    class Node<ValueType> {
        let value: ValueType
        let minValue: ValueType
        var next: Node<ValueType>?
    
        init(_ value: ValueType, _ minValue: ValueType) {
            self.value = value
            self.minValue = minValue
        }
    }
    

    완정 적정식 碼


    class MinStack {
        private var topNode: Node<Int>?
    
        init() {}
    
        func push(_ x: Int) {
            let node = Node<Int>(x, min(x, topNode?.minValue ?? Int.max))
            node.next = topNode
            topNode = node
        }
    
        func pop() {
            topNode = topNode?.next
        }
    
        func top() -> Int {
            return topNode?.value ?? 0
        }
    
        func getMin() -> Int {
            return topNode?.minValue ?? Int.max
        }
    
        class Node<ValueType> {
            let value: ValueType
            let minValue: ValueType
            var next: Node<ValueType>?
    
            init(_ value: ValueType, _ minValue: ValueType) {
                self.value = value
                self.minValue = minValue
            }
        }
    }
    

    복도 분석


  • 시간 복도: 每一個都是 O(1)
  • 공간 복도: 여과 전부 도시 push ,령 n 위 push 적 계량. 애연 value 和 minValue 為 2n, 간화 후 공간 복도도위 O(n)

  • 결과


  • h tps : // / ㅇ t 여기. 코 m / 스 b 미시 온 s /에서 원하는 l / 322705070 /
  • Runtime: 96 ms (94.4%)
    Memory Usage: 22.9 MB
    

    포유



    유대 stack 가위 하늘, 소이트 getMin() 和 top() 的回傳型別應 要要 Optional Int

    좋은 웹페이지 즐겨찾기